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].