Prolog写成对列表

时间:2013-05-05 21:32:50

标签: prolog

我有一个清单:

[a,b,c]

我想打印这样的列表:

a -> b
b -> c

到目前为止,我有这段代码:

print([]).
print([H|T]) :- write(H), write(' -> '), nl, print(T).

将产生以下结果:

a -> 
b -> 
c -> 

2 个答案:

答案 0 :(得分:1)

您的谓词需要从列表中提取更多项目。尝试:

print([]).
print([_]).  % if we're trying to print pairs, we can't print a single item
print([X,Y|T]) :- write(X), write(' -> '), write(Y), nl, print([Y|T]).

答案 1 :(得分:0)

你可以考虑将逻辑 - 尽管是最小的 - 与IO分开:

pairs([A,B|T], P) :- P = (A,B) ; pairs([B|T], P).
printp(L) :- forall(pairs(L, (A,B)), writeln(A->B)).

这样,对/ / 2就可以枚举你的序列,以防你需要...