Debugging 我有一个奇怪的输出,我没有预料到。这很相似,但。。很奇怪

Debugging 我有一个奇怪的输出,我没有预料到。这很相似,但。。很奇怪,debugging,prolog,Debugging,Prolog,所以我开始学序言,我想学它的诀窍。现在,我正在做一项由书中设定的作业,我已经走得很远了。我的输出几乎与所需匹配,但不知何故,它使最后几个LEST以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 = [E

所以我开始学序言,我想学它的诀窍。现在,我正在做一项由书中设定的作业,我已经走得很远了。我的输出几乎与所需匹配,但不知何故,它使最后几个LEST以
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
结构,尾部由点组成。然而,我不知道这意味着什么,也不知道我在代码中做错了什么

有谁能详细解释一下我为什么会遇到这些问题,也许能引导我朝着正确的方向去帮助我解决这个问题


顺便说一句,如果我对某些部分不清楚,我深表歉意。如果我是这样的话,请说出来,我将尝试编辑/详细说明。

我刚刚在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在视觉上简化了结果,但实际上保留了正确的结果。“仅显示”问题。

我刚刚在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在视觉上简化了结果,但实际上保留了正确的结果。“仅显示”问题。

是的,没关系。在SWI prolog提示符下尝试按
p
w
h
。是的,没问题。在SWI prolog提示符下尝试按
p
w
h