He oído que en Prolog, el programa y los datos son la misma cosa. Qué significa eso?El programa y los datos son iguales en Prolog?
Respuesta
Significa que su programa se implementa como un conjunto de reglas, y los datos también se implementan como un conjunto de reglas: no hay distinción entre una regla que hace que algunas operaciones sucedan (un programa) y una regla que simplemente devuelve un valor de datos.
Esto se refiere a que los términos son datos, pero el programa también se describe en términos.
?- A=write(B), C=(B is 1+2), Prog = (C, A).
A = write(B),
C = (B is 1+2),
Prog = (B is 1+2, write(B)).
?- $Prog.
3
true.
Prolog fuente es solo una lista de reglas. Algunas reglas son solo "datos": son true
sin más evaluación.
person(james).
father(james, thomas).
"James es una persona." "James es el padre de Thomas".
Estas reglas son los datos.
Puedo realizar una consulta con estos datos. Puedo pregunto:
?- person(X).
La respuesta será:
X = james.
O:
?- father(X, thomas).
la respuesta será la misma.
Otras reglas necesitan una evaluación adicional.
grandfather(X, Z) :- father(X, Y), father(Y, Z).
Este es un simple "programa".
Nuestro programa de abuelo se evaluará como verdadero si tenemos los datos correctos. Por ejemplo:
father(james, william).
father(james, tyler).
father(james, thomas).
father(jeff, james).
Si ejecuto el siguiente programa:
?- grandfather(jeff, X).
me sale:
X = william
puedo pedir prólogo para continuar y conseguiré X = tyler
y X = thomas
.
La sintaxis se vuelve más complicada, pero los conceptos básicos son los mismos. Los datos y el programa son solo un conjunto de hechos. El arte de prolog es hacer las reglas correctas que conducen el cálculo a un resultado.
Solo para ponerme el sombrero de mi pedante, el nombre para esto es: homoiconic. Hay mucho sobre esto: Machine Code es, también, homoicónico.
- 1. ¿CDN y Cloud son iguales?
- 2. ¿El intervalo, el segmento, los árboles fenwick son iguales?
- 3. Son "{Binding Path =.}" Y "{Binding}" realmente iguales
- 4. varchar (20) y varchar (50) son iguales?
- 5. ¿Son dos funciones iguales?
- 6. ¿Por qué arr y & arr son iguales?
- 7. ¿Son la semántica y la sintaxis iguales?
- 8. ¿Cuáles son los usos del predicado de falla en Prolog?
- 9. ¿Por qué el operador! = De Python piensa que los argumentos son iguales y no iguales al mismo tiempo?
- 10. ¿Por qué los objetos Buffer y List son iguales (incluso si son de clases diferentes)?
- 11. Son "(función() {})()" y "(función() {}())" funcionalmente iguales en JavaScript?
- 12. pitón reducir comprobar si todos los elementos son iguales
- 13. ¿Cuándo dos enumeraciones son iguales en C#?
- 14. ¿Por qué Java no ve que los enteros son iguales?
- 15. ¿Son estas dos configuraciones iguales en maven?
- 16. Prolog - ASSERT y RETRACT
- 17. ¿Son "div> p" y "div p" iguales?
- 18. Cadena Compara dónde nulo y vacío son iguales
- 19. ¿Las referencias y punteros son iguales con respecto al polimorfismo?
- 20. Cocoa: compruebe si dos NSArrays son iguales
- 21. Comprueba si dos vectores son iguales
- 22. ¿Cómo almacenar datos "iguales a"?
- 23. Determine si dos árboles binarios son iguales
- 24. LINQ: compruebe si dos listas son iguales
- 25. PHP: Probando si tres variables son iguales
- 26. Android y Prolog
- 27. Nothing = String.Empty (¿Por qué son iguales?)
- 28. Comparando dos números que son aproximadamente iguales
- 29. Compruebe si 2 URL son iguales
- 30. ¿Por qué estos números no son iguales?
Gracias. Excelente respuesta –