pavone@170: { pavone@170: _empty <- #{ pavone@170: length <- { 0 } pavone@170: empty? <- { true } pavone@170: fold:with <- :acc :fun { acc } pavone@170: foldr:with <- :acc :fun { acc } pavone@170: map <- :fun { self } pavone@170: | <- :val { pavone@170: list node: val withTail: self pavone@170: } pavone@170: . <- :right { right } pavone@190: reverse <- { self } pavone@188: join <- { "" } pavone@215: contains? <- :val { false } pavone@173: string <- { "[]" } pavone@173: print <- { print: string } pavone@170: } pavone@170: #{ pavone@170: empty <- { _empty } pavone@170: node:withTail <- :_val :_tail { pavone@170: #{ pavone@170: value <- { _val } pavone@170: tail <- { _tail } pavone@170: empty? <- { false } pavone@170: length <- { pavone@170: fold: 0 with: :acc val { acc + 1 } pavone@170: } pavone@170: fold:with <- :acc :fun { pavone@170: cur <- self pavone@170: while: { not: (cur empty?)} do: { pavone@170: acc <- fun: acc (cur value) pavone@170: cur <- cur tail pavone@170: } pavone@170: acc pavone@170: } pavone@170: foldr:with <- :acc fun { pavone@170: fun: (_tail foldr: acc with: fun) _val pavone@170: } pavone@170: map <- :fun { pavone@170: node: (fun: _val) withTail: (_tail map: fun) pavone@170: } pavone@173: foreach <- :self fun { pavone@173: fold: 0 with: :idx el{ pavone@173: fun: idx el pavone@173: idx + 1 pavone@173: } pavone@173: self pavone@173: } pavone@170: | <- :val { pavone@170: node: val withTail: self pavone@170: } pavone@170: . <- :right { pavone@170: foldr: right with: :tail val { pavone@170: node: val withTail: tail pavone@170: } pavone@170: } pavone@190: reverse <- { pavone@190: fold: [] with: :tail val { pavone@190: node: val withTail: tail pavone@190: } pavone@190: } pavone@188: join <- :sep { pavone@188: _tail fold: (string: _val) with: :acc el { pavone@188: acc . sep . el pavone@188: } pavone@188: } pavone@215: contains? <- :val { pavone@215: if: _val = val { pavone@215: true pavone@215: } else: { pavone@215: _tail contains?: val pavone@215: } pavone@215: } pavone@173: string <- { pavone@173: (fold: "[\n" with: :acc el { pavone@173: acc . " " . (string: el) . "\n" pavone@173: }) . "]" pavone@173: } pavone@173: print <- { pavone@173: print: "[\n" pavone@173: foreach: :_ el { pavone@173: print: " " . (string: el) . "\n" pavone@173: } pavone@173: print: "]" pavone@173: } pavone@170: } pavone@170: } pavone@170: } pavone@170: }