-1

我在解决这个序言问题时遇到了麻烦。定义一个后缀谓词,使得 postfix(X,Y) 表示 X 是一个列表,它是 Y 的后缀。也就是说,X 的每个元素都等于(与)Y 的对应元素,但 Y 可能包含额外的之前的元素。

在:

postfix(X,[1,2,3]).

出去:

[]; [3]; [2,3]; [1,2,3];

我试过了

postFix(X,[]). 
postFix(X,Y) :- append(,X,Y), [H|T] is Y, postfix(,X,T).

谢谢!

4

1 回答 1

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);
于 2015-12-17T00:59:10.153 回答