2013-05-05 86 views
0

我有一个列表:序言写列表

[a,b,c] 

我想打印的清单是这样的:

a -> b 
b -> c 

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

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

这将产生以下结果:

a -> 
b -> 
c -> 

回答

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]). 
+0

太好了。谢谢 :) – pvl 2013-05-05 21:53:17

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是准备好你的枚举顺序,如果你需要做的..