Mercurial > repos > tabletprog
diff modules/list.tp @ 170:18598163e3ef
Add linked list implementation and cons operator
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 13 Aug 2013 21:58:03 -0700 |
parents | |
children | 158444b77c09 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/list.tp Tue Aug 13 21:58:03 2013 -0700 @@ -0,0 +1,48 @@ +{ + _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 } + } + #{ + 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) + } + | <- :val { + node: val withTail: self + } + . <- :right { + foldr: right with: :tail val { + node: val withTail: tail + } + } + } + } + } +}