Prolog プログラムの冒頭で、次のように表示されます。
:-dynamic(path/1).
頭のない節のようです。どういう意味ですか?
Prolog プログラムの冒頭で、次のように表示されます。
:-dynamic(path/1).
頭のない節のようです。どういう意味ですか?
Prolog インタープリターが:-
プログラムのロード時に句の前にあることを認識すると、その句はプログラムの「データベース」の一部になるのではなく、すぐに実行されます。の最も一般的な使用法は、:-
プログラム ファイルの最後にプログラムの開始述語を定義することです。これにより、プログラムと共にファイルをロードすると、プログラムが実行されます。
具体的にdynamic/1
は、指定された述語の定義が実行時に変更される可能性があることをインタープリターに通知します。これは、プログラムの残りの部分を読む前にインタプリタが知っておく必要があることです。これにより、path/1
述語を使用するための特別な調整を行うことができます。
プロローグのテキストでは、主要なファンクターを持つ用語(:-)/1
はディレクティブです。
dynamic
ディレクティブには次の効果があります。
P/N
句が指定されていなくても、述語が定義されています。デフォルトでは、句のない述語のゴールを実行すると、存在エラーが発生します。asserta/1
、などによって変更される場合がありますrectract/1
。デフォルトでは、述語は静的であり、それを変更しようとすると許可エラーが発生します。clause/2
。デフォルトでは、述語はプライベートであり、インスペクションを使用clause/2
するとパーミッション エラーが発生します。一部のシステム (SWI など) では、ユーザー定義のすべての述語が公開されているため、 で検査できますclause/2
。したがって、この効果は SWI では観察できません。多くの実装では、未知のディレクティブを通常の目標として扱い、実行します。ただし、これらの目標が実行される正確な時点については、実装によって大きく異なります。ファイルをリロードすると、それらはさらに異なります。
プロローグ テキストの実行準備が整った直後にゴールが実行されるようにする場合は、ディレクティブを使用しinitialization/1
ます。