error-handling - Prolog程序超出全局堆栈错误

标签 error-handling prolog out-of-memory proof

我正在尝试一个定理证明程序。但是规则4似乎执行不力。

% delete
del(X, [X | Tail], Tail).
del(X, [Y | Tail], [Y | Tail1]) :-
    del(X, Tail, Tail1).

% remove 
remove(X, Y, L1, L2) :-
    del(X, L1, L3),
    del(Y, L3, L2).

% prove
prove(true).
prove([L1 seq L2]) :-
    seq(L1, L2),
    !.

% Rule 1
seq(L1, L2) :-
    member(X, L1),
    member(X, L2),
    !.

% Rule 4
seq(L1, L2) :-
    Z = or(X, Y),
    del(Z, L2, L4),
    remove(X, Y, L3, L4),
    seq(L1, L3).
prove([[p] seq [q]]).-生成false,这是正确的。prove([[p] seq [q, r]]).-生成错误的,正确的。
但是prove([[p] seq [q or r]]).-已超出全局堆栈。然后我认为规则4有问题。
任何想法如何解决此问题?非常感谢。

最佳答案

在规则4中,据我所知,

  • 设置Z为or或
  • 的模板
  • 尝试从L2删除该模板,以便留下L4,然后填充该模板的组件(X和Y)
  • 找到一个L3,从中可以删除或的组成部分,以得到L4,
  • 然后尝试用L3而不是L2解决问题

  • 但这意味着L3不一定会在终止方面取得任何进展。

    关于error-handling - Prolog程序超出全局堆栈错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25578215/

    相关文章:

    google-chrome - Genesis wordpress 主题中的 Cast_sender.js Chrome 扩展错误

    python - 如何检查正则表达式是否完全匹配字符串,即 - 字符串不包含任何额外字符?

    integer - 检查 Prolog 中的字符是否为数字?如何实现整数/1?

    ruby - Sidekiq 在工作人员完成后不释放内存

    python - 读取大文件时跳过一长行以避免 MemoryError?

    git - PowerShell - 捕获 Git 命令的 STDERR 输出

    javascript - 在 node.js 中捕获需要模块的错误

    prolog - Herbrand 宇宙和最小 Herbrand 模型

    list - 检查列表是否有序

    java - 扫描仪程序 OutOfMemoryError 和使用内存分析器 (MAT