Hola, estoy tratando de insertar un elemento en una lista, pero es muy importante para mi programa que el resultado se almacene en la lista original y no en una nueva.
Cualquier código que haya escrito o encontrado en Internet solo tiene éxito si crea una nueva lista en la que se guarde el resultado final.
Así que mi pregunta es si alguien me puede decir cómo definir una función: insertar (X, L) donde X es un elemento y L es una lista?inserte el elemento en una lista y devuelva la misma lista actualizada
Respuesta
No, Prolog simplemente no funciona de esa manera. No existe tal cosa como "modificar" un valor. Una variable se puede unificar con un valor específico, pero si ya era [1,3]
, nunca será [1,2,3]
después.
Como dice aschepler, no puede agregar o hacer ningún cambio a una lista adecuada, es decir, una lista en la que cada elemento ya está vinculado. La única "modificación" que podemos hacer es unificar una expresión con otra.
Sin embargo, hay un concepto de una lista parcial a la que se pueden "agregar" elementos adicionales al final. Esto se conoce generalmente como una lista de diferencias, aunque esa nomenclatura puede no ser inmediatamente comprensible.
Supongamos que comenzamos, no con una lista vacía, sino con una variable libre X. Sin embargo, podríamos pensar en restar X de X y obtener "nada". Es decir, una lista de diferencias vacía se representa con X - X. El signo menos "-" es un operador puramente formal; no se pretende evaluar la diferencia. Es solo una sintaxis conveniente, como puede ver en cómo las listas de diferencias se pueden usar para lograr lo que (probablemente) quiera hacer.
Podemos añadir un elemento a una lista de diferencias de la siguiente manera:
insertDL(M,X-Y,X-Z) :- Y = [M|Z].
Aquí M es el nuevo elemento que queremos añadir, XY es la lista de diferencias "viejo", y XZ es el "nuevo" diferencia (a la que se ha agregado M, unificando la variable previamente libre Y con la lista parcial [M | Z], de modo que Z se convierta en la cola "abierta" de la lista parcial X).
Cuando finalmente terminemos de insertar elementos en nuestra lista de diferencias, podemos convertir X en una lista adecuada estableciendo la "cola libre" en ese punto en la lista vacía []. En este sentido, X es la "misma" variable que cuando comenzamos, unificada por pasos incrementales desde la variable libre hasta la lista adecuada.
Esta es una técnica muy poderosa en la programación de Prolog, y se necesita cierta práctica para sentirse cómodo al usarla. Algunos enlaces a mayor discusión en la Web:
[A partir de las listas de Prolog a diferencia listas]
http://www.irisa.fr/prive/ridoux/ICLP91/node8.html
[listas de diferencia La implementación en Prolog]
http://www.cl.cam.ac.uk/~jpw48/difflists.pdf
[Lecture Notes: Listas de diferencia]
http://www.cs.cmu.edu/~fp/courses/lp/lectures/11-diff.pdf
Algunos prólogos proporcionan el predicado setarg/3 para modificar los términos en lugar
Con el fin de utilizarlo sobre listas, sólo es necesario tener en cuenta que no son más que una buena representación de cadenas de términos compuestos con funtor '.'/2
En cualquier caso, cuando se necesita usar setarg/3 en Prolog, se probablemente significa que estás haciendo algo mal.
- 1. Dada una lista desordenada de enteros, devuelva un valor no presente en la lista
- 2. encontrar el elemento insertado en la lista
- 3. Restando el elemento actual y anterior en una lista
- 4. Omitir el primer elemento en la lista
- 5. Nested Parallel.ForEach Loops en la misma lista?
- 6. ASP.NET MVC LISTA y crear en la misma vista
- 7. elemento de la lista contiene objetos de otra lista
- 8. jpa eliminando el elemento de la lista
- 9. ¿Cómo eliminar el primer y último elemento de una lista?
- 10. Buscar un elemento en una lista Lua
- 11. Lista de transformación en el mapa del elemento -> lista (elemento) en scala
- 12. ¿Cómo recorro una lista y elimino un elemento en groovy?
- 13. Verifique el elemento específico en una lista en Drools
- 14. Acceso al elemento aleatorio en la lista
- 15. Prueba del elemento en lista
- 16. OCaml inserta un elemento en la lista
- 17. lo bien eliminar elemento de la lista
- 18. Python slice primer y último elemento en la lista
- 19. Lista de Prólogos. Compruebe si el primer y último elemento de la lista es similar
- 20. Haskell reemplazar elemento en la lista
- 21. ¿Cómo se calcula el índice del elemento en una lista?
- 22. usando PARSENAME para buscar el último elemento en una lista
- 23. ¿Cómo encontrar el índice de un elemento en una lista?
- 24. Python- encontrar el elemento con eventos máximo en una lista
- 25. Comprobar si el elemento está en una matriz/lista
- 26. ¿Cómo hacer que Groovy/Grails devuelva una Lista de objetos en lugar de una Lista de Listas de objetos?
- 27. Seleccionar un solo elemento de una lista
- 28. ¿Encontrar un elemento de una lista cuando la lista está en un diccionario?
- 29. Agregando un elemento a la Lista en el Esquema
- 30. Obtener el primer elemento de una lista idiomáticamente en maravilloso
Si necesita actualizar la lista en su lugar, entonces está tratando de pensar de manera imperativa. ¿Puedes describir el problema que intentas resolver con más detalle? – Juliet