Prolog - 将'cons'术语转换为列表

时间:2018-03-29 13:08:41

标签: list prolog

我希望转换一个类似于此的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 时,我希望能够将其转换为列表。我可以完成剩下的所有工作,我只是坚持从术语到列表的转换。

非常感谢任何帮助我指明正确方向的协助。

1 个答案:

答案 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].