【问题标题】:Prolog "Out of local stack" ErrorProlog“超出本地堆栈”错误
【发布时间】:2014-02-13 15:51:32
【问题描述】:

这是我的简单 Prolog 程序:

friend(X,Y):-
   knows(X,Y).
friend(X,Z):-
   friend(X,Y),
   friend(Y,Z).

knows(brian,tom).
knows(tom,peter).

如果我输入以下查询

friend(brian,peter).

Prolog 将给出以下输出:

?- friend(brian,peter).
true 

如果再输入一个分号,Prolog 会说:

ERROR: Out of local stack

我在这里做错了什么?

【问题讨论】:

    标签: prolog failure-slice transitive-closure


    【解决方案1】:

    错误出现在第二个子句中。应该是:

    friend(X,Z):-
       knows(X,Y),
       friend(Y,Z).
    

    否则,当您向 Prolog 询问更多解决方案时,您最终会在没有先建立 knows/2intermediate 关系的情况下让 friend/2predicate 递归调用自己。您可以通过跟踪对friend/2 谓词的调用来了解有关程序中错误的更多信息。试试:

    ?- trace, friend(brian,peter).
    

    【讨论】:

      【解决方案2】:

      了解程序中未终止的来源,只需查看以下故障片:

      朋友(X,Y):- , 知道(X,Y)。 朋友(X,Z):- 朋友(X,Y),朋友(Y,Z)知道(布赖恩,汤姆):- 错误知道(汤姆,彼得):-

      因为friend(X, Z) :- friend(X, Y), ...,你的程序不会终止。它会在这里和那里产生答案,但最终它会循环。更多信息,请参阅

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多