2016-09-12 5 views
1

私はAを定義しているモジュールterm_expansion/2を書いています。副作用として、モジュールBによってインポートされると、モジュールBで定義された用語は、モジュールAで説明されているように展開されます。しかし、ユーザーがBを読み込んだ後で、対話セッションで?- [B].を使用した後に、シェルから来た用語を拡張することはできませんでした。 シェルから来たクエリ/ディレクティブを操作して代わりに呼び出すにはどうすればよいですか?Prolog:シェルからの入力で用語拡張を実行するには?

例:

ユーザーの種類は

?- my_append("AB", "CD", L). 

私は(それに限定されない)を展開した後に呼ばれるこのような何かにmy_append -termを展開したい場合:

?- extra_args(A0, A1), my_append_with_extra_args(A0, A1, "AB", "CD", L). 

明確にする:用語拡張/操作自体は問題ではありません - 私が知る必要があるのは、使用できるフック/ term_expansion/2のように再定義することです。

+0

REPLからモジュールAをインポートする: '? - [a]。 – CapelliC

+0

@CapelliCセッションを開始する前に必ず「A」をインポートすることを覚える必要はありません。 – user3389669

答えて

1

私が探していた述語はexpand_query/4です。

+1

単純な 'goal_expansion/2'ルールでは十分ではありませんか?この方法では、クエリだけでなく、プログラム内でも目標を使用できます。 – mat

+0

@mat 'goal_expansion/2'が頻繁にトリガーします。単純な '? - append(" a "、" b "、L)を実行すると、1回ではなく4回トリガされます。また、 'term_expansion/2'プロセス中に起動されますが、これは私が探しているものではありません。 – user3389669

+0

@mat驚くべきことに、私は 'goal_expansion/2'を使って[Prologクエリを展開する]方法(https://stackoverflow.com/questions/46614561/implementing-partial-evaluation-in-swi-prolog)を見つけられませんでした。 。これは何とか可能ですか? –

関連する問題