我在解决这个序言问题时遇到了麻烦。定义一个后缀谓词,以便后缀(X,Y)表示X是一个Y的后缀列表。也就是说,X的每个元素等于(统一)Y的相应元素,但Y可能包含其他元素之前的元素。
在:
postfix(X,[1,2,3]).
OUT:
[]; [3]; [2,3]; [1,2,3];
我试过
postFix(X,[]).
postFix(X,Y) :- append(,X,Y), [H|T] is Y, postfix(,X,T).
谢谢!
答案 0 :(得分:2)
你其实非常接近。这是非常简单的
因此,后缀意味着在X
之前附加任何内容,这会产生Y
这是append/3的作用:append(prefix,postfix,list)
postfix(X,Y) :- append(_,X,Y).
示例:
- postfix(X,[1,2,3]).
X = [1, 2, 3] ;
X = [2, 3] ;
X = [3] ;
X = [] ;
false.
如果您想将此作为列表
postfixList(X,Y) :- findall(P,append(_,P,Y),X);