是否可以在Prolog中使用惰性列表?类似于以下内容:
ones([1 | Y]) :- ones(Y).
Run Code Online (Sandbox Code Playgroud)
虽然这显然不起作用.
最近我被介绍了这个OCaml代码,它在Haskell中可以写成:
data DL a = DL [a] a [a]
create [] = error "empty list"
create (x:xs) = DL [] x xs
next (DL pr x (h:tl)) = DL (x:pr) h tl
next _ = error "end of dlist"
prev (DL (p:pr) x tl) = DL pr p (x:tl)
prev _ = error "start of dlist"
Run Code Online (Sandbox Code Playgroud)
虽然我不是一个正确的双向链表实现,因为它在遍历上创建了新的存储.OTOH有这个Haskell代码:
data DList a = Leaf | Node { prev::(DList a), elt::a, next::(DList a) }
create = …Run Code Online (Sandbox Code Playgroud)