Mercurial > repos > tabletprog
comparison 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 |
comparison
equal
deleted
inserted
replaced
153:075b1e71feff | 170:18598163e3ef |
---|---|
1 { | |
2 _empty <- #{ | |
3 length <- { 0 } | |
4 empty? <- { true } | |
5 fold:with <- :acc :fun { acc } | |
6 foldr:with <- :acc :fun { acc } | |
7 map <- :fun { self } | |
8 | <- :val { | |
9 list node: val withTail: self | |
10 } | |
11 . <- :right { right } | |
12 } | |
13 #{ | |
14 empty <- { _empty } | |
15 node:withTail <- :_val :_tail { | |
16 #{ | |
17 value <- { _val } | |
18 tail <- { _tail } | |
19 empty? <- { false } | |
20 length <- { | |
21 fold: 0 with: :acc val { acc + 1 } | |
22 } | |
23 fold:with <- :acc :fun { | |
24 cur <- self | |
25 while: { not: (cur empty?)} do: { | |
26 acc <- fun: acc (cur value) | |
27 cur <- cur tail | |
28 } | |
29 acc | |
30 } | |
31 foldr:with <- :acc fun { | |
32 fun: (_tail foldr: acc with: fun) _val | |
33 } | |
34 map <- :fun { | |
35 node: (fun: _val) withTail: (_tail map: fun) | |
36 } | |
37 | <- :val { | |
38 node: val withTail: self | |
39 } | |
40 . <- :right { | |
41 foldr: right with: :tail val { | |
42 node: val withTail: tail | |
43 } | |
44 } | |
45 } | |
46 } | |
47 } | |
48 } |