Predicatep/1
は組み込みの predicate を使用してい(is)/2
ます。X is 5
は、構文的により便利な書き方であることに注意してくださいis(X,5)
。ただし、メタインタープリターは、ユーザー定義の述語と制御構造(',')/2
とのみを期待していますtrue/0
。処理したい場合(is)/2
は、別の節を導入する必要があります。
sol(X is Y) :- !, X is Y.
ISO Prolog 内では、組み込みの述語であるpredicate_property(Goal,built_in)
かどうかをテストするためにゴールを使用できます。Goal
これは、B、GNU、SICStus、SWI、XSB、YAP などの多くのシステムで機能します。したがって、次のように書くことができます。
sol(Bip) :- predicate_property(Bip, built_in), !, Bip.
ECLiPSe では、このビルトインは直接利用できません。ライブラリをロードする必要があります。マニュアルのインデックスは、ライブラリswi
またはを使用することを提案していますquintus
。なんらかの (不明な) 理由で、ECLiPSe ライブラリの一部ではありiso
ませんが、ISO です。そう状態
:- use_module(library(swi)).
最初にファイル(またはトップレベル)で。
完全な Prolog 言語をカバーするメタインタープリターが必要な場合は、すべての制御構造を明示的に処理する必要があります。ここにそれらがあります-標準で定義されているとおりです(7.8 Controlコンストラクト)。
true/0
fail/0
call/1
!/0
(',')/2
(;)/2
-選言
(->)/2
(;)/2
- if-then-else
catch/3
throw/1
直接ゴールを呼び出して扱えるものはごく一部ですのでご注意ください。それらのほとんどは、明示的に処理する必要があります!