我有一个奇怪的输出我不指望。它很相似但很奇怪

时间:2012-02-26 22:08:25

标签: debugging prolog

所以我接受了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。如果我对某些部分不清楚,我会道歉。如果我一直如此,请说出来,我会尝试编辑/详细说明。

1 个答案:

答案 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是在视觉上缩写结果,但实际上是持有正确的结果。 “仅显示”问题。