Reorganizando nombres variables

Cómo escribir de forma conforme a las normas.avs_term_rearranged(AVs, T, AVsR) con dadoAVs yT tal queAVsR es una permutación deAVs con los elementos dispuestos en el mismo orden en que sus variables aparecen en orden de izquierda a derecha enT.

AVs Es una lista de elementos del formulario.A = V dóndeA es un átomo que designa un nombre de variable como'X' yV Es una variable correspondiente. Estas listas son producidas porread_term/2,3 con la opción de lecturavariable_names/1 (7.10.3). Además, el orden preciso de los elementos no está definido.

| ?- read_term(T,[variable_names(AVs)]).
A+B+A+_+C.

AVs = ['A'=A,'B'=B,'C'=C]
T = A+B+A+_+C

T es un término que contiene todas las variables deAVs más un poco más.

Tenga en cuenta que en un programa de conformidad estándar no se puede confiar en el término orden para las variables (7.2.1):

7.2.1 Variable

SiX yY Son variables que no son idénticas entonces.X term_precedes Y será dependiente de la implementación, excepto que durante la creación de una lista ordenada (7.1.6.5, 8.10.3.1 j) el ordenamiento se mantendrá constante.

NOTA - SiX yY Ambas son variables anónimas, entonces no son términos idénticos (ver 6.1.2 a).

Considere como un ejemplodesde 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.]

Así que hay dos formas posibles de cómosort/2 funcionará, y uno ni siquiera puede confiar en el éxito de:

sort([f(U),U,U,f(V),f(U),V],L), sort(L, K), L == K.

Como ejemplo:

?- avs_term_rearranged(['A'=A,'B'=B,'C'=C], A+C+F+B, AVsR).
   AVsR = ['A'=A,'C'=C,'B'=B].

Respuestas a la pregunta(4)

Su respuesta a la pregunta