avs_term_rearranged(AVs, T, AVsR)
givenAVs
などT
を使用して標準に準拠した方法で記述する方法。これAVsR
はAVs
、変数がT
.
AVs
は のような変数名を指定するアトムであり、 は対応する変数A = V
であるという形式の要素のリストです。このようなリストは、read-option (7.10.3) を使用して生成されます。さらに、要素の正確な順序は定義されていません。A
'X'
V
read_term/2,3
variable_names/1
| ?- read_term(T,[variable_names(AVs)]).
A+B+A+_+C.
AVs = ['A'=A,'B'=B,'C'=C]
T = A+B+A+_+C
T
AVs
プラスいくつかのすべての変数を含む項です。
標準準拠プログラムでは、変数の順序という用語に依存できないことに注意してください (7.2.1):
7.2.1 変数
X
とY
が同一でない変数の場合、X
term_precedesY
は、ソートされたリスト (7.1.6.5、8.10.3.1 j) の作成中に順序が一定のままであることを除いて、実装に依存するものとします。注 —
X
とY
が両方とも無名変数である場合、それらは同一の項ではありません (6.1.2 a を参照)。
8.4.3.4の例を考えてみましょう:
sort([f(U),U,U,f(V),f(U),V],L).
Succeeds, unifying L with [U,V,f(U),f(V)] or
[V,U,f(V),f(U)].
[The solution is implementation dependent.]
したがって、 がどのように機能するかは 2 つの方法が考えられますsort/2
。
sort([f(U),U,U,f(V),f(U),V],L), sort(L, K), L == K.
例として:
?- avs_term_rearranged(['A'=A,'B'=B,'C'=C], A+C+F+B, AVsR).
AVsR = ['A'=A,'C'=C,'B'=B].