私はswi-prologにプログラムを持っていて、演算子(?)->があります。これは初めて会ったもので、何をしているのかわかりません。私が理解していないコードの断片があります:
swf([PP->Q|F], [PP|L], X):- swf(F, L, X), axioms(X, PP->Q, F).
私たちが持っているときに私はそれを見つけました
X -> Y ; Z
次に、Xがtrueの場合、Yが実行され、それ以外の場合はZが実行されます。ただし、上記の場合にどのように機能するかはわかりません。
前もって感謝します。
編集:
正直なところ、これはアローの定理のコンピューター支援証明の一部であり(より正確には-基本ケース)、これはコード全体です(PROLOG、KenryoIndoによるアローの定理の証明から):
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-公理-パレートとswf-iia-メンバー。