2
term_expansion/2
を使用してプロローグソースファイルを処理するモジュールを作成しています。そうしている間に、私は=..
を使って述語を解体するか、functor/3
を使ってその名前に投影します。たとえば :プロローグ/ファンクタの名前をプロローグに変更
?- functor(pred(foo, bar), N, _).
N = pred.
?- pred(foo, bar) =.. L.
L = [pred, foo, bar].
は、今私はpred_expanded
(例えば)にpred
の名前を変更し、pred(foo, bar)
がpred_expanded(foo, bar)
になるように、再度用語ようにしたいです。
私はappend(pred, "_expanded", F)
とappend(pred, '_expanded', F)
を試してみましたが、成功しませんでした。例えば
使用ISO述語**原子を連結する 'atom_concat/3' ** – mat
@matなぜ答えを書かないのですか?そして、同じモジュール内に "展開された"名前の述語が存在するとどうなりますか? (これは 'term_expansion/2'を使ってコードを生成するより一般的な問題です)。拡張が単一のパスで行われるように拡張コードが定義されていても、展開されたコードは自動的にそれ以上拡張されません。 –
@Boris:私はメタプログラミング、用語拡張など、多くの重要なトピックの良いエントリーポイントであると思う以上のポスターを募集したいと思います。単に "use atom_concat/3"と答えればすぐに受け入れられれば、すぐに全体の質問が忘れられ、あなたが言及したような他の重要かつ関連することは、この機会に引き続き議論されることはありません。それにもかかわらず、私はユーザーに直ちに問題を直面させたいと考えています。そのため、両方の要件を満たすことが最善の方法です。 – mat