Converti il numero di peano S (n) in intero in prolog
-
12-11-2019 - |
Domanda
Mi sono imbattuto in questa valutazione del numero naturale dei numeri logici in un tutorial e mi ha dato del mal di testa:
natural_number(0).
natural_number(s(N)) :- natural_number(N).
La regola afferma approssimativamente che: se N
è 0
è naturale, se non proviamo a inviare il contenuto di s/1
restituire ricorsivamente alla regola fino a quando il contenuto è 0
, allora è un numero naturale se no, allora non lo è.
Quindi ho testato l'implementazione logica sopra, ho pensato a me stesso, beh, funziona se voglio rappresentare s(0)
come 1
e s(s(0))
come 2
, ma mi piacerebbe poter convertire s(0)
a 1
invece.
Ho pensato alla regola di base:
sToInt(0,0). %sToInt(X,Y) Where X=s(N) and Y=integer of X
Quindi questa è la mia domanda: Come posso convertire S (0) in 1 e S (S (0)) a 2?
Ha risposto
Modificare: Ho modificato la regola di base nell'implementazione a cui la risposta che ho accettato mi ha indicato:
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).
Quindi ora posso usarlo come volevo, grazie a tutti!
Nessuna soluzione corretta