me encontré con esta evaluación número natural de números lógicos en un tutorial y me ha estado dando algunos dolores de cabeza:convertir número Peano s (n) de número entero en Prolog
natural_number(0).
natural_number(s(N)) :- natural_number(N).
La regla más o menos precisa que: si N
es 0
es natural, si no tratamos de enviar el contenido de s/1
recursivamente a la regla hasta que el contenido sea 0
, entonces es un número natural si no, entonces no lo es.
Así que probó la aplicación lógica anterior, pensé para mí, esto funciona bien si quiero representar s(0)
como 1
y s(s(0))
como 2
, pero Me gustaría ser capaz de convertir a s(0)
1
lugar.
he pensado en la regla de base:
sToInt(0,0). %sToInt(X,Y) Where X=s(N) and Y=integer of X
Así que aquí está mi pregunta: ¿Cómo puedo convertir s (0) a 1 y S (s (0)) a 2?
ha sido contestada
Editar: he modificado la regla de base en la aplicación, que la respuesta acepté me señaló hacia:
decode(0,0). %was orignally decode(z,0).
decode(s(N),D):- decode(N,E), D is E +1.
encode(0,0). %was orignally encode(0,z).
encode(D,s(N)):- D > 0, E is D-1, encode(E,N).
Así que ahora puedo usarlo como quería para, gracias a todos!
(a) ¿Es esta tarea? (b) Este es un problema estándar: debería poder encontrarlo en cualquier tutorial o libro de texto sobre programación lógica. – Marcin
a) No, solo estoy tratando de aprender Prolog b) Uno pensaría eso, pero he pasado la mitad de un día tratando de encontrar una respuesta a esta pregunta en vano – shaungus