我有一个奇怪的输出,我没想到.其相似,但是.很奇怪



所以我开始学习Prolog,并试图学习它的诀窍。现在我正在做一项书中设定的任务,我已经取得了很大的进步。我的输出几乎与所需的相匹配,但不知何故,它使最后几个出来的莱斯特以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|...]].

正如你在输出中看到的,我得到的最后两个last有一个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只是在视觉上缩写了结果,但实际上却保持了正确的结果。"仅显示"问题。

相关内容

最新更新