Prolog是否有一个;当且仅当;操作人员
我通常会把这样的声明写成两个条款,如下所示:Prolog是否有一个;当且仅当;操作人员,prolog,Prolog,我通常会把这样的声明写成两个条款,如下所示: x :- y. y :- x. 在Prolog中,有没有简洁的方法来编写类似“IfX thenY,反之亦然”这样的语句 换句话说,是否可以将“x当且仅当y”作为一条语句编写?据我所知,不是在swi prolog中 另一方面,您可以编写一个小型重写谓词,使用以下小型程序自动重写程序理论: :- dynamic([system:term_expansion/2]). :- op(900, xfx, user:(:::)). system:term_
x :- y.
y :- x.
在Prolog中,有没有简洁的方法来编写类似“IfX thenY,反之亦然”这样的语句
换句话说,是否可以将“x当且仅当y”作为一条语句编写?据我所知,不是在swi prolog中 另一方面,您可以编写一个小型重写谓词,使用以下小型程序自动重写程序理论:
:- dynamic([system:term_expansion/2]).
:- op(900, xfx, user:(:::)).
system:term_expansion(:::(H,T),[H :- T, T :- H]) :-
callable(H),
callable(T).
然后你可以简单地使用
x ::: y.
当然,您可以指定除:
之外的其他运算符,只需相应地替换运算符定义(op/3
)和术语扩展/2
另一方面,只有在调用此函数之前解析了头部和身体的坐标,这才不会屈服于无限循环。否则,转换后的程序将无限循环。Prolog不是一个真正的逻辑引擎,它只是一个逻辑编程:用逻辑语法指定一个程序,而不是表达一个逻辑理论。你说你通常会写“p if and only if q”(我将在下面写q q),如下所示 但这只有在以下情况下才是正确的
p(X) :- q(X).
q(X) :- p(X).
那么意思是
forall X: p(X) <= q(X) and forall X': q(X') <= p(X')
意味着
在Prolog中可以使用表示“当且仅当”规则 例如,在SWI Prolog中:
:- use_module(library(chr)).
:- chr_constraint class/2,species/2,animal/1,mammal/1,bird/1.
%X can be a member of only one species
species(X,X1),species(X,X2) <=> X1 = X2.
%X can be a member of only one class
class(X,X1),class(X,X2) <=> X1 = X2.
%X is a bird if and only if X is an animal and a pelican or a pigeon
bird(X) <=> animal(X),class(X,bird),(species(X,pelican);species(X,pigeon)).
%X is a mammal if and only if X is an animal
mammal(X) <=> animal(X),class(X,mammal),(species(X,cat);species(X,dog);species(X,bear)).
:-使用_模块(库(chr))。
:-chr_约束类/2,物种/2,动物/1,哺乳动物/1,鸟类/1。
%X只能是一个物种的成员
物种(X,X1),物种(X,X2)X1=X2。
%X只能是一个类的成员
类(X,X1),类(X,X2)X1=X2。
%X是鸟当且仅当X是动物和鹈鹕或鸽子时
鸟类(X)动物(X),类别(X,鸟),(物种(X,鹈鹕);物种(X,鸽子))。
%X是哺乳动物当且仅当X是动物时
哺乳动物(X)动物(X),类(X,哺乳动物),(物种(X,猫);物种(X,狗);物种(X,熊))。
逻辑编程与真正的“逻辑引擎”有何不同?我以前从未听说过这种区别。Prolog使用SLD范式:从左到右的深度优先评估,否定作为有限失败和封闭世界假设。例如,答案集编程使用不同的语义(自下而上、构造性否定等)。如果Prolog确实不能表达逻辑理论,那么还有其他语言可以表达它们吗?有几种语言,每种语言都有各自的语义和缺点。一个相当完整的软件包就是我们在大学开发的IDP系统。它支持完整的一阶逻辑。您好,我是IDP系统的维护人员之一。目前我们没有支持论坛,但您可以向krr发送有关IDP的问题-dev@cs.kuleuven.be我们会尽力帮助你
forall X,X': p(X) <= q(X) and q(X') <= p(X')
forall X: p(X) <= q(X) and q(X) <= p(X)
p(X,Y) :- q(X,Z).
forall X,Y exists Z: p(X,Y) <=> q(X,Z)
p_iff_q(X) :- p(X) <=> q(X).
p_iff_q(X) :- p(X),q(X) ; \+p(X),\+q(X).
:- use_module(library(chr)).
:- chr_constraint class/2,species/2,animal/1,mammal/1,bird/1.
%X can be a member of only one species
species(X,X1),species(X,X2) <=> X1 = X2.
%X can be a member of only one class
class(X,X1),class(X,X2) <=> X1 = X2.
%X is a bird if and only if X is an animal and a pelican or a pigeon
bird(X) <=> animal(X),class(X,bird),(species(X,pelican);species(X,pigeon)).
%X is a mammal if and only if X is an animal
mammal(X) <=> animal(X),class(X,mammal),(species(X,cat);species(X,dog);species(X,bear)).