我希望转换一个类似于此的Prolog术语:
cons(a, cons(b, cons(c, cons(d, nil ))))
到列表中:
[a, b, c, d]
我有一个功能来验证cons(a, cons(b, cons(c, cons(d, nil ))))
是一个正确的清单,如下:
list(nil).
list(cons(_,X)):-
list(X).
产生,
?- list(cons(a, cons(b, cons(c, cons(d, nil ))))).
true.
现在,当我通过像 list(cons(a, cons(b, cons(c, cons(d, nil ))))).
这样的术语,并且 true 时,我希望能够将其转换为列表。我可以完成剩下的所有工作,我只是坚持从术语到列表的转换。
非常感谢任何帮助我指明正确方向的协助。
答案 0 :(得分:3)
一个简单的解决方案是:
list(nil, []).
list(cons(A,X), [A|L]):-
list(X,L).
示例:
?- list( cons(a, cons(b, cons(c, cons(d, nil )))), L).
L = [a, b, c, d].