Prolog 使用另一个谓词的返回值来计算值

Prolog 使用另一个谓词的返回值来计算值,prolog,Prolog,我有以下代码。我所有的其他功能都在工作。我已经测试过了。但是当我添加这个特殊的代码时,事情就开始失控了。即使是删除重复项的函数也会在本地堆栈外表现出奇怪的行为。有什么问题吗 我有时也会得到这个不允许重新定义导入的_过程'lists:append/3' common-unique-elements(L1,L2,Ans):- nested-to-simple(L1, L1_simple), nested-to-simple(L2, L2_simple), remove-dup

我有以下代码。我所有的其他功能都在工作。我已经测试过了。但是当我添加这个特殊的代码时,事情就开始失控了。即使是删除重复项的函数也会在本地堆栈外表现出奇怪的行为。有什么问题吗

我有时也会得到这个不允许重新定义导入的_过程'lists:append/3'

common-unique-elements(L1,L2,Ans):-
    nested-to-simple(L1, L1_simple),
    nested-to-simple(L2, L2_simple),
    remove-duplicates(L1_simple, L1_F),
    remove-duplicates(L2_simple, L2_F),
    simple-intersection(L1_F, L2_F,F).
    append(F,[],Ans).

上面公布的代码中也有两个句号。普通元素/3以简单元素/3结束。然后你就有了一个没有主体的append/3的定义。

你无意中用主functor-/2调用了谓词。使用下划线分隔参数描述!例如L1、L2?不,例如嵌套的to simple!正如我所说,您无意中使用了-/2作为主要函子。在Prolog中,-/2是一个中缀运算符,因此形式为X-Y的术语与-X,Y相同。在您发布的代码中,您的目标如下:-简单,相交L1_F,L2_F,F,这几乎肯定不是您想要编写的。相反,使用u下划线来分隔参数描述,如在simple_intersectionL1_F,L2_F,F中,这是Prolog中使用的命名约定。这可能会有帮助吗?——写下\u canonicalnested-to-simpleL1,L1\u-simple.,产生:--nested,to,simple,请为这个完全不相关的新问题单独提出一个问题。