42得票2回答
Prolog后继符号得到的结果不完整并导致无限循环。

我开始学习Prolog,并了解了后继符号。 这就是我了解在Prolog中编写Peano公理的地方。 请参阅PDF第12页:sum(0, M, M). sum(s(N), M, s(K)) :- sum(N,M,K). prod(0,M,0). prod(s(N), M, P) :...

11得票1回答
良好的Prolog代码特点是什么?

要写出优秀的Prolog程序,程序员需要掌握哪些设计启发法?听说有经验的程序员需要大约两年时间才能熟练掌握Prolog。有效地使用递归是其中的一部分,但这似乎只是一个相对较小的障碍。究竟是什么让程序员遇到如此多的问题?我应该在示例代码中寻找什么来判断其质量?

9得票2回答
递归谓词中的回溯技术

假设我们有以下谓词(这是来自Prolog编程的示例): [F0] isInteger(0). [F1] isInteger(X):- isInteger(Y), X is Y+1. 查询结果的第一个是 isInteger(R),标记放置在 F0 处,返回 R=0。 如果用户按下 ; ,...

8得票9回答
Prolog程序:查找两个列表的任意顺序相等

我想编写一个Prolog程序来查找两个列表的相等性,其中元素的顺序不重要。因此我编写了以下代码: del(_, [], []) . del(X, [X|T], T). del(X, [H|T], [H|T1]) :- X \= H, del(X, T, T1). membe...

7得票2回答
为什么这个命令会在Prolog中导致堆栈溢出?

我有以下的Prolog代码片段: num(0). num(X) :- num(X1), X is X1 + 1. fact(0,1) :-!. fact(X,Y) :- X1 is X-1, fact(X1,Y1), !, Y is Y1 * X. fact(X) :- num(Y), ...

7得票3回答
Prolog - 无限循环

我希望检查元素是否在列表的中间。我搜索中间元素,然后检查它是否是列表的成员,但我得到了无限循环。 我的谓词: remove_first([_,H1|T], [H1|T]). remove_last([_],[]). remove_last([H|T], [H|T2]) :- remove_...

7得票3回答
如何防止Prolog无限制地检查不可能的解决方案?

假设以下程序: nat(0). nat(s(N)) :- nat(N). /* 0+b=b */ plus(0,B,B) :- nat(B). /* (a+1)+b = c iff a+(b+1)=c */ plus(s(A),B,C) :- plus(A,s(B),C). 它非常适用...