List Prolog-转换为';反对意见';清单上的术语
我希望转换一个类似于以下内容的序言术语:List Prolog-转换为';反对意见';清单上的术语,list,prolog,List,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.
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ЮЮЮ))。
,它是真的,我想把它转换成一个列表。剩下的我都能做了,我只是停留在从术语到列表的转换上
如果您能为我指明正确的方向,我们将不胜感激。一个简单的解决方案是:
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].
我试过一些不同的方法,比如:{create_list(cons(,X),L):-append(,L,L2),L=L2。}这和你的想法一致吗?我想这只是格式问题。在我的代码中有一个下划线,但它没有出现在注释中。Prolog中列表的标准形式恰好是
。(H,t)
,其中H
是列表的头部,t
是列表的尾部(或其余部分)。括号符号[…]
只是一个语法上的“糖”。所以。
实际上是Prolog版本的cons
,因为[a,b,c,d]
的真正形式是。(a!非常感谢您抽出时间!