显示表达式列表中的元素

时间:2015-04-19 11:13:18

标签: prolog

我有一个包含表单形式的列表:a-I-J-K(这些不是表达式,而是变量的编码,但这不是这个问题的重点)。

我想使用以下代码编写列表中的每个表达式:

display(L) :- member(p-I-J-K, L), write(I), nl, fail.
display(_).

有了这个,我试图让Prolog与L中的所有元素统一p-I-J-K,它起作用,因为它打印出来。唯一的问题是这段代码会将元素打印在一个不会停止的循环中,我无法理解为什么。

在示例中我只是写我来说明问题,在真正的问题中我写了一个有意义的字符串。

所以基本上,为什么这段代码永远不会停止,什么是正确的方法呢?

1 个答案:

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

应该这样做。