我在swi-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.但我不在上面的情況下,看不出它是如何工作的。
在此先感謝。
編輯:
說實話,這是阿羅定理的計算機輔助證明的一部分(更準確地說 - 基本情況),這是整個代碼(由PROLOG證明阿羅定理,Kenryo印度) :
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 - 公理 - pareto和swf - iia - 成員。
我剛更新了我的文章。你可以看看嗎? – Grzes 2013-02-22 23:34:15
最後的查詢是: swf(F,arrow),\ +獨裁者(_,F)。 – Grzes 2013-02-23 09:14:08
在這種情況下謂詞swf生成結果,不檢查它。 此程序返回: ? - swf(F,arrow)。 [(a,b,c],[a,b,c] - > [a,b,c]),([a,b,c],[b,a,c] [a,b,c],[c,a,b] - > [c,a,b]),([a,b,c],[a,c,b (a,b,c),[b,c,a] - > [b,c,a]),([a,b,c],[c ,b,a] - > [c,b,a]),... 現在很清楚,正如您之前提到的, - >是模式選擇器。 非常感謝! – Grzes 2013-02-23 09:48:47