Cómo agregar un elemento a una lista en un forall?
Básicamente intentando añadir D
a una lista en un forall
para luego ordenar esta lista y extraer el valor más pequeño. Aquí está lo que he intentado hasta ahora:
distancia_más_pequeña( W ) :-
forall( a( S1, S2 ), ( w( S1, S2, D ), append([D], Xs, Ls ), Xs = Ls ) ),
sort(Xs, [W|_]).
davy.ai
Intento de agregar
D
a una lista en unforall
En el fragmento de código dado, se ha intentado agregar
D
a una lista en un bucleforall
. Sin embargo, este intento no tiene éxito porque la listaXs
a la que se está agregando no está definida.La función
append([D], Xs, Ls)
agregaD
a la listaXs
y almacena el resultado en la listaLs
. Pero, comoXs
no está definida en el bucleforall
, la llamada a la función no se ejecuta correctamente.Para solucionar este problema, necesitamos definir la lista
Xs
antes de agregarD
a ella. Una forma de hacer esto es:Aquí, el predicado
findall
captura todos los valores deD
para todas las parejasS1, S2
que satisfacen la condiciónw(S1,S2,D)
.Luego, la lista resultante
Xs
se ordena y se extrae el valor más pequeño comoW
.En general, el fragmento de código actualizado debería funcionar como se espera.