所以我接受了Prolog并试图学习它的绳索。现在我正在完成这本书的任务,我已经走得很远了。我的输出几乎与所需的输出相匹配,但不知何故,它使得最后出现的几个lests以head|tail
格式出现,其中尾部是一行点?
我写的代码看起来像这样:
%prefix methode. E1 + L = L1
% It takes L, adds E1 in front of it and makes it L1.
prefix(_,[],[]).
prefix(El,[LHead|LTail],[Q|L1]) :- Q = [El|LHead], prefix(El,LTail,L1).
gray(0,[[]]).
gray([],[]).
% this should generate a list of all the gray
% code possibilities with the defined length
gray(N,Lijst) :- N > 0, X is N - 1, gray(X,Prevlist),
reverse(Prevlist, RevPrevlist), prefix(0,Prevlist,Deel1),
prefix(1,RevPrevlist,Deel2), append(Deel1,Deel2,Lijst).
现在应该做的就是我举例说明-?gray(3,List).
它应该告诉我:
List = [[0,0,0],[0,0,1],[0,1,1],[0,1,0],[1,1,0],[1,1,1],[1,0,1],[1,0,0]].
然而它告诉我的是:
List = [[0, 0, 0], [0, 0, 1], [0, 1, 1], [0, 1, 0], [1, 1, 0], [1, 1, 1], [1, 0|...], [1|...]].
正如你可以看到输出我得到的最后两个持续时间为head|tail
结构,尾部由点组成。但是我不知道这意味着什么或我在我的代码中做错了什么。
任何人都可以详细说明为什么我会得到这些点,并且可能引导我朝正确的方向帮助我解决问题?
P.S。如果我对某些部分不清楚,我会道歉。如果我一直如此,请说出来,我会尝试编辑/详细说明。
答案 0 :(得分:3)
我刚刚在swi-prolog上试过这个:
2 ?- grey(3, List).
Correct to: "gray(3,List)"? yes
List = [[0, 0, 0], [0, 0, 1], [0, 1, 1], [0, 1, 0], [1, 1, 0], [1, 1, 1], [1, 0|...], [1|...]] [write]
List = [[0, 0, 0], [0, 0, 1], [0, 1, 1], [0, 1, 0], [1, 1, 0], [1, 1, 1], [1, 0, 1], [1, 0, 0]]
注意它在哪里说[写] ..我按下'w'按钮,迫使swi-prolog将整个列表转储出来,而不仅仅是用...来回复...
不确定这是否有帮助,或者答案是否正确。
如果没有,建议更详细地解释问题/作业本身。您已经详细解释了您的解决方案,但目前尚不清楚问题是什么?无论如何,对我来说。
编辑我看到你已经编辑澄清了..是的,看起来prolog是在视觉上缩写结果,但实际上是持有正确的结果。 “仅显示”问题。