我试图定义一个仿函数并在Prolog中打印每个列表项,但Prolog没有以正确的格式打印。
rint(L):-
write(H).
输出就像是
rint([a, s,v ,c]).
_L139
true.
这是我期望通过调用仿函数来实现的,任何帮助或想法都表示赞赏,我是Prolog的新手并且正在学习它。
?- rint([a,b,c,d]).
.(a, .(b, .(c, .(d, []))))
答案 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,编写以下逗号和空格,然后调用自己的列表尾部,然后写入右括号。