Prolog打印声明无法按预期工作

时间:2011-09-14 04:31:25

标签: prolog

我试图定义一个仿函数并在Prolog中打印每个列表项,但Prolog没有以正确的格式打印。

rint(L):-
    write(H).

输出就像是 rint([a, s,v ,c]).
_L139
true.

这是我期望通过调用仿函数来实现的,任何帮助或想法都表示赞赏,我是Prolog的新手并且正在学习它。

?- rint([a,b,c,d]).

.(a, .(b, .(c, .(d, []))))

2 个答案:

答案 0 :(得分:1)

我认为应该是

rint(L) :- write(L).

此外,如果您想要输出.(a, .(b, .(c, .(d, []))))而不是[a, b, c, d],请使用display

rint(L) :- display(L).

答案 1 :(得分:0)

问题是rint规则中的错误。

您的定义表明,rint(L)成功write(H)成功。那时,口译员对H一无所知。所以它写了一个它不知道的值,这就是为什么你看到_L139,一个未初始化变量的内部表示。
完成后,write(H)已成功,为真,因此rint(L)为真。口译员告诉你:true.

要定义自己的rint/1而不依赖于display/1等内置插件,您需要执行类似

的操作
rint([]) :-
    write([]).
rint([H|T]) :-
    write('.('),
    write(H),
    write(', '),
    rint(T),
    write(')').

如果您尝试显示空列表,请写下来。如果您正在尝试显示任何其他列表,请编写打开期间和括号,写入Head,编写以下逗号和空格,然后调用自己的列表尾部,然后写入右括号。