76得票10回答
'if' in prolog?

在Prolog中有一种方法可以使用if语句,例如如果一个变量为0,则执行某些操作(向终端输出文本)。不需要else,但我找不到任何if的文档。

36得票2回答
if_/3 有什么用途?

这个谓词if_/3在Stack Overflow Prolog部分的几位主要贡献者中似乎非常流行。 这个谓词是由@false提供的实现: if_(If_1, Then_0, Else_0) :- call(If_1, T), ( T == true -> call(Th...

33得票8回答
不同/2 - 存在纯粹、确定的定义吗?

different(Xs, Ys) :- member(X, Xs), non_member(X, Ys). different(Xs, Ys) :- member(Y, Ys), non_member(Y, Xs). 虽然这个定义使用member/2和non_memb...

20得票6回答
一组字符串的最长公共前缀(LCP)

lcs([ H|L1],[ H|L2],[H|Lcs]) :- !, lcs(L1,L2,Lcs). lcs([H1|L1],[H2|L2],Lcs):- lcs( L1 ,[H2|L2],Lcs1), lcs([H1|L1], L2 ,Lcs2),...

19得票3回答
成员检查/2的声明式用法

memberchk/2 是一个常见的谓词,它是基于 member/2 定义的,如下所示: memberchk(X, Xs) :- once(member(X, Xs)). 因此,它只适用于member/2的第一个答案。其完整的过程含义不适用于纯关系。作为其非关系行为的示例,请考虑: ...

18得票3回答
使用 \==/2 或 dif/2

如果我想确保两个变量不实例化为相同的术语,最好的方法是什么?假设我需要在图中查找有向边,一个节点不能与自身有边:node(a, x, y). node(b, z, x). node(c, y, y). 这里的边是从 a 到 c,从 b 到 a,但不是从 c 到 c。 以下内容有效:edge(...

17得票1回答
Prolog中的“逻辑纯度”是什么意思?

在Prolog编程的上下文中,“逻辑纯度”是什么意思?逻辑纯度标签信息说“只使用Horn子句的程序”,但是,像if_/3这样的谓词如何符合要求,因为它使用了剪枝和各种元逻辑(什么是适当的术语?var/1等)谓词,即底层内容。 我明白它实现了一些“纯净”的效果,但这确切意味着什么? 为了更具...

15得票1回答
坚定性:定义及其与逻辑纯度和终止的关系

到目前为止,我一直认为Prolog程序中的坚定性意味着: 如果对于一个查询Q,存在一个子项S,使得存在一个术语T使得?- S=T, Q.成功,尽管?- Q, S=T.失败,那么由Q调用的谓词之一是不坚定的。 直观地说,我认为坚定性意味着我们不能使用实例化来“欺骗”谓词以提供否则不仅从未...

14得票2回答
查询中冗余目标的使用

在@repeat的建议下,考虑一个纯程序的查询1?- G_0.。如果有的话,查询?- G_0, G_0.有什么用处吗? 脚注 1 为了安全起见,不进行表格化处理,但约束是可以的。 关于此主题的先前帖子。

14得票2回答
Prolog中的逻辑否定

我已经阅读了关于Prolog的Negation by Failure的很多内容,其中Prolog为了证明\+Goal成立,尝试证明Goal失败。这与CWA(close world assumption)密切相关,例如,如果我们查询\+P(a)(其中P是一元谓词),并且没有线索表明P(a)成立,...