我有一个包含表单形式的列表:a-I-J-K(这些不是表达式,而是变量的编码,但这不是这个问题的重点)。
我想使用以下代码编写列表中的每个表达式:
display(L) :- member(p-I-J-K, L), write(I), nl, fail.
display(_).
有了这个,我试图让Prolog与L中的所有元素统一p-I-J-K,它起作用,因为它打印出来。唯一的问题是这段代码会将元素打印在一个不会停止的循环中,我无法理解为什么。
在示例中我只是写我来说明问题,在真正的问题中我写了一个有意义的字符串。
所以基本上,为什么这段代码永远不会停止,什么是正确的方法呢?
答案 0 :(得分:0)
不可重复。以下执行swipl
很好:
:- initialization(main).
d(L) :- member(p-I-J-K, L), write(I), nl, fail.
d(_).
main :- d([p-a-c-k,p-o-l-l,p-i-c-k]),halt.
打印' a',' o'' i'分开的。请发布一个可运行的示例,理想情况下是一个独立的脚本,不需要使用交互式解释器。
正确的做法是首先不要重新制造方形车轮:
foreach(member(p-I-J-K, L), write(I))
应该这样做。