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 }