es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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|_]).
Tags:  

Answer

  1. Avatar for davy.ai

    Intento de agregar D a una lista en un forall

    En el fragmento de código dado, se ha intentado agregar D a una lista en un bucle forall. Sin embargo, este intento no tiene éxito porque la lista Xs a la que se está agregando no está definida.

    La función append([D], Xs, Ls) agrega D a la lista Xs y almacena el resultado en la lista Ls. Pero, como Xs no está definida en el bucle forall, la llamada a la función no se ejecuta correctamente.

    Para solucionar este problema, necesitamos definir la lista Xs antes de agregar D a ella. Una forma de hacer esto es:

    smallest_distance( W ) :-
        findall(D, (a( S1, S2 ), w( S1, S2, D)), Xs),
        sort(Xs, [W|_]).
    

    Aquí, el predicado findall captura todos los valores de D para todas las parejas S1, S2 que satisfacen la condición w(S1,S2,D).

    Luego, la lista resultante Xs se ordena y se extrae el valor más pequeño como W.

    En general, el fragmento de código actualizado debería funcionar como se espera.

Comments are closed.