我有一个列表G = [a,b,c,d,e,f,g,h,i,j]。和T列表中有元素[苹果,葡萄,a,梨,f,橙,榴莲]。我想像T中的FirstElement一样打印 - > G中的元素 - > T中的LastElement 例如。苹果,a,f,榴莲。我的问题现在只能显示苹果 - >榴莲但不是a,f印刷。
G=[a,b,c,d,e,f,g,h,i,j].
in(a,'1').
in(b,'2').
in(c,'3').
........
printFormat(Prev,[H|T]) :- not(member(H,G)), printFormat(X,T).
printFormat(Prev,[H|T]) :- member(H,G]), in(H,I) write(' -> {'), write(H), write(' -> '), write(I), write('}'), printFormat(X,T).
printFormat(Prev,[Last]) :- write(' -> '), write(Last).
答案 0 :(得分:1)
这是错误的:
G=[a,b,c,d,e,f,g,h,i,j].
因为你在Prolog中没有全局变量(至少使用这种语法)。你可以改写:
g(E) :- memberchk(E, [a,b,c,d,e,f,g,h,i,j]).
然后使用(printFormat的前2个子句可以像其他方式一样重写,避免重复线性测试):
printFormat(Prev,[H|T]) :-
( (oh(X,H,_,_,_), not(g(H)) % not should be \+
-> true
; in(H,I)
-> write(' -> {'), write(H), write(' -> '), write(I), write('}')
; % this mismatch should never appear? not in(H,I)
throw(mismatch)
),
printFormat(X,T).