Doubly-linked list/Traversal: Difference between revisions
Content added Content deleted
(→{{header|Haskell}}: shorter name for the loop function, "go" ; add field labels, lastNode etc.) |
|||
Line 590: | Line 590: | ||
<lang haskell>main = print . traverse True $ create [10,20,30,40] |
<lang haskell>main = print . traverse True $ create [10,20,30,40] |
||
data DList a = Leaf | Node (DList a) a (DList a) |
data DList a = Leaf | Node { prev::(DList a), elt::a, next::(DList a) } |
||
create = |
create = go Leaf |
||
where |
where go _ [] = Leaf |
||
go prev (x:xs) = current |
|||
where current = Node prev x next |
where current = Node prev x next |
||
next = |
next = go current xs |
||
isLeaf Leaf = True |
|||
isLeaf _ = False |
|||
lastNode Leaf = Leaf |
|||
lastNode dl = until (isLeaf.next) next dl |
|||
traverse _ Leaf = [] |
traverse _ Leaf = [] |