7

prologで (:) が表すものを明示的に見つけることができませんでした。
インタラクティブ モードでは、次の証拠を確認できます。

?- display(a:b).
:(a,b)
true.

?- display([a,b,c]).
.(a,.(b,.(c,[])))
true.

?- display(a:b:c:[]).
:(a,:(b,:(c,[])))
true.

?- a:b:REST = a:TAIL.
TAIL = b:REST.

(:) はどのような目的で導入されていますか? 詳細については、www で見つけることができませんでした。リストとしての再帰構造について話す別の構文方法を提供しているようです。

ライト・アソシエティブと言えますが、その優先度はいくつですか?

:-op(??, xfy, :).

そのような種類の暗黙のファンクターをすべてリストする方法はありますか?

listing(op). %of course this does not work
4

1 に答える 1

8

これがモジュール修飾子です。これでその宣言を確認できます。

?- current_op(X,Y,:).
X = 600,
Y = xfy.

モジュールは Prolog の重要な拡張機能であり、特に大規模なプログラムに必要ですが、ISO 標準には含まれていません。SWI-Prolog は (いつものように) これについて実用的な視点を持ち、有用なアプローチを実装しています。

OT検査オペレーターには、次のスニペットが役立ちます。

oplist :-
    setof((A,C,B), current_op(A,B,C), L),
    maplist(writeln, L).
于 2012-10-06T12:50:19.323 に答える