【发布时间】:2014-03-09 04:48:07
【问题描述】:
我现在有以下谓词不断给我:ERROR: Out of local stack
equality(First,Second,Third,Range):-
mash(First,Second,Third,Range,X),
mash(First,Second,Third,4,Y),
equal(X,Y).
equal(X,Y) :- X == Y.
我知道所有功能都可以正常工作。它应该输出对我来说相等的真或假。当我这样做时,虽然我得到一个本地堆栈错误。
做错了什么?
一个例子是:
equality([-1.0,-1.0],[[0,-1],[-1,0]],0,5)
【问题讨论】:
-
它只是输出一个列表。它工作正常。
-
了解
mash/5的作用对于理解该谓词的行为至关重要。 -
@mbratch Mash 创建一个列表,例如 [1,1]。然后 equal 应该比较它们的输出。
-
但是细节(源代码)对于理解问题很重要。
equality/4和equal/2不是递归谓词。他们不会占用你的堆栈空间。那么,我怀疑mash/5正在这样做。我知道您说mash/5有效,但在这种情况下可能存在问题。如果您显示您的mash/5代码,并显示您输入的导致堆栈溢出的查询,则可以弄清楚。