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 = worker Leaf
create = go Leaf
where worker _ [] = Leaf
where go _ [] = Leaf
worker prev (x:xs) = current
go prev (x:xs) = current
where current = Node prev x next
where current = Node prev x next
next = worker current xs
next = go current xs

isLeaf Leaf = True
isLeaf _ = False

lastNode Leaf = Leaf
lastNode dl = until (isLeaf.next) next dl


traverse _ Leaf = []
traverse _ Leaf = []