変数名のセットを取得したい用語があります。
例えば。入力: my_m(aa,b,B,C,max(D,C),D) 出力: [B,C,D] (入力の出現順に並べる必要はありません) (これは set_variable_name( のように呼び出します)入出力)。)
入力から [B,C,D,C,D] を簡単に取得できますが、set を実装する方法がわかりません (出力に 1 つしか表示されません)。rbtrees に保存するようなことを試みましたが、失敗しました。
only_one([],T,T) :- !.
only_one([X|XS],B,C) :- rb_in(X,X,B), !, only_one(XS,B,C).
only_one([X|XS],B,C) :- rb_insert(B,X,X,U), only_one(XS,U,C).
のような単一のノードと統合を持つツリーを返しますB=C, C=D...
。理由がわかったと思います-rb_in(..)に質問している間にXを統合したためです。
では、その変数名を 1 回だけ格納するにはどうすればよいでしょうか。それとも、論理プログラミングを使用しているため、根本的に間違った考えですか? なぜこれが必要なのか知りたい場合は、Prolog で A* アルゴリズムを実装するように求められているためです。これは、検索空間を作成するための一部です。