Prolog打印列表中的某些元素

时间:2011-10-20 16:57:56

标签: list prolog

我有一个列表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).

1 个答案:

答案 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).