我使用SWI-Prolog的和感到困惑,爲什麼選擇庫將被寫入到提供以下輸出:SWI-Prolog的選項處理
?- option(a(A), [a=1, a=2, a(3)]).
A = 3.
?- option(b(B), [b=1, b=2]).
B = 1.
我希望A = 1 ......通過選項展望庫代碼雖然,這個結果顯然是打算(git link),但爲什麼這不是一個錯誤?
option(Opt, Options) :- % make option processing stead-fast
arg(1, Opt, OptVal),
nonvar(OptVal), !,
functor(Opt, OptName, 1),
functor(Gen, OptName, 1),
option(Gen, Options),
Opt = Gen.
option(Opt, Options) :-
get_option(Opt, Options), !.
get_option(Opt, Options) :-
memberchk(Opt, Options), !.
get_option(Opt, Options) :-
functor(Opt, OptName, 1),
arg(1, Opt, OptVal),
memberchk(OptName=OptVal, Options), !.
我想我可以原諒圖書館找到列表中的第一個匹配,並忽略後續匹配(即推入一個新的選項到隱藏後面的一個選項列表),並半分析它。我只是無法找到一種方法來證明它首先在表單鍵(值)然後key = value中進行搜索。 – DaveEdelstein