含义 - >在swi-prolog

时间:2013-02-22 18:52:55

标签: prolog

我在swi-prolog中有一个程序,并且有一个操作符(?) - > ,这是我第一次遇到的,我不知道它在做什么。有一段代码,我不明白:

swf([PP->Q|F], [PP|L], X):- swf(F, L, X), axioms(X, PP->Q, F).

当我们有

时,我发现了
X -> Y ; Z

然后如果X为真则执行Y,否则执行Z.但我不知道它在上面显示的情况下是如何工作的。

提前致谢。

编辑:

老实说,这是Arrow的定理的计算机辅助证明的一部分(更确切地说 - 基本情况),这是整个代码(来自PROLOG的证明箭头定理,Kenryo Indo):

p(Q) :- permutation(Q, [a, b, c]).

p((X, Y), Q) :- p(Q), append(_, [X|B], Q), member(Y, B).

pp((Q1,Q2)) :- p(Q1), p(Q2).

all_pp(L) :- findall(QQ, pp(QQ), L).

axioms(arrow, V, F) :- p(Q), V=(PP->Q), pareto(V), iia(V, F).

swf([], [], _).
swf([PP->Q|F], [PP|L], X):- swf(F, L, X), axioms(X, PP->Q, F).
swf(F, X) :- all_pp(L), swf(F, L, X).

pp(XY, agree, (Q1,Q2)) :- p(XY, Q1), p(XY, Q2).
pp((X, Y), opposite, (Q1, Q2)) :- p((X, Y), Q1), p((Y, X), Q2).

pareto(PP->R) :- \+ (pp(XY, agree, PP), \+ p(XY, R)).

dictator(J, F) :- member(J:PP, [1:(P, _), 2:(_, P)]),
\+ (member(PP->R, F), pp(_, opposite, (P, R))).


agree(+, XY, QQ) :- pp(XY, agree, QQ).
agree(-,(X,Y), QQ) :- pp((Y, X), agree, QQ).

iia(PP->R, F) :- \+ (F \= [], pp(XY, A, PP), member(QQ->S, F),
pp(XY, A, QQ), \+ agree(_, XY, (R, S))).

仍然,我不知道如何治疗 - >。有一系列使用X-> Y:swf - 公理 - 帕累托和瑞士法郎 - 成员。

1 个答案:

答案 0 :(得分:4)

在Prolog中,运算符只是嵌套术语的语法糖。

即。我们可以写is(X, +(1,2))而不是写X is 1+2,因为(op)/ 2和+有适当的is / 3声明。另一个故事是与这些术语相关的解释。要按照我的示例,会出现像is(X, V) :- eval_expression(V, X).

这样的子句

现在确实(->)/ 2它是一个if / then / else运算符(或更好的if / then,else由析取运算符引入,(;)/ 2),当用作目标,但在您展示的代码中,它可以作为模式选择器使用,可能是。即如果有其他条款swf / 3,则有可能用该表达式调用公理/ 3,我猜这意味着暗示

HTH

编辑这里是放置在SWI-Prolog IDE中的代码图片。语法颜色显示两个问题:

  • 不使用公理中的PP(箭头,V,F)
  • 从不调用swf(F,X)(参数丢失?)

enter image description here

似乎dictator / 2是条目子句。我不知道这个定理(我无法访问文档),但我希望对社会实体有一个预测。

第一个问题不存在,因为PP将在pareto / 1中使用。真正的问题应该是swf缺少的参数,应该读作swf(F, L, X) :- ...,但这会导致循环。