Prolog PostFix 问题
Prolog PostFix Issue
我无法解决这个序言问题。定义一个后缀谓词,使 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).
谢谢!
你们其实很接近。简单多了
所以 postfix 意味着在 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);
我无法解决这个序言问题。定义一个后缀谓词,使 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).
谢谢!
你们其实很接近。简单多了
所以 postfix 意味着在 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);