{ _empty <- #{ length <- { 0 } empty? <- { true } fold:with <- :acc :fun { acc } foldr:with <- :acc :fun { acc } map <- :fun { self } | <- :val { list node: val withTail: self } . <- :right { right } string <- { "[]" } print <- { print: string } } #{ empty <- { _empty } node:withTail <- :_val :_tail { #{ value <- { _val } tail <- { _tail } empty? <- { false } length <- { fold: 0 with: :acc val { acc + 1 } } fold:with <- :acc :fun { cur <- self while: { not: (cur empty?)} do: { acc <- fun: acc (cur value) cur <- cur tail } acc } foldr:with <- :acc fun { fun: (_tail foldr: acc with: fun) _val } map <- :fun { node: (fun: _val) withTail: (_tail map: fun) } foreach <- :self fun { fold: 0 with: :idx el{ fun: idx el idx + 1 } self } | <- :val { node: val withTail: self } . <- :right { foldr: right with: :tail val { node: val withTail: tail } } string <- { (fold: "[\n" with: :acc el { acc . " " . (string: el) . "\n" }) . "]" } print <- { print: "[\n" foreach: :_ el { print: " " . (string: el) . "\n" } print: "]" } } } } }