1

割り当ての場合、プロローグ プロシージャ本体を動的に生成する必要があります。これどうやってするの?

4

4 に答える 4

2

関連する述語の swi プロローグ マニュアルの説明については、こちらを参照してください。

例として、次のことを考えてみましょう

goal :- Z =.. [foo, 1], 
    Y =.. [bar,2], 
    X =.. [',', Z, Y], 
    R =.. [':-', r, X],  
    assert(Z), assert(Y), assert(X), assert(R).

PS: 別の可能性は下位クラスですが、より良い選択になる場合もあります。構築する必要があるものをファイルに出力するだけです。

于 2011-05-10T13:18:05.233 に答える
0

assert/1、asserta/1、retract/1、retractAll/1、廃止/1

于 2011-05-10T12:25:40.340 に答える
0

述語を追加するには、asserta/1 または assertz/1 を使用する必要があります (assert/1 は非推奨です) 。ロードしたコードで述語の句の一部を既に宣言している 場合は、dynamic/ を使用して述語を動的として定義する必要があります。もう1

句の形成は、入力の形式に依存します。述語の名前と引数のリストがある場合は、=../2を使用できます。 文字列に句がある場合は、term_to_atom/2を使用できます(両方の方法で機能します) 。

于 2011-05-10T12:34:35.920 に答える