mi sono imbattuto in questa valutazione numero naturale di numeri logici in un tutorial e mi sta dando un po 'di mal di testa:Converti numero di Peano s (N) per intero in Prolog
natural_number(0).
natural_number(s(N)) :- natural_number(N).
La regola afferma grosso modo che: se N
è 0
è naturale, se non proviamo a inviare il contenuto di s/1
indietro in modo ricorsivo alla regola finché il contenuto non è 0
, quindi è un numero naturale se non è così.
Così ho provato la realizzazione logica di cui sopra, pensato a me, questo funziona bene se voglio rappresentare s(0)
come 1
e s(s(0))
come 2
, ma I'd piace essere in grado di convertire s(0)
-1
invece.
Ive pensato della regola di base:
sToInt(0,0). %sToInt(X,Y) Where X=s(N) and Y=integer of X
Così qui è la mia domanda: Come posso convertire i (0) a 1 e S (s (0)) per 2?
è stato risposto
Edit: ho modificato la regola di base per l'attuazione, che la risposta ho accettato mi ha segnalato in direzione:
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).
Così ora posso usarlo come avrei voluto a, grazie a tutti!
(a) E' compiti? (b) Questo è un problema standard - dovresti riuscire a trovarlo in qualsiasi tutorial o libro di testo sulla programmazione logica. – Marcin
a) No, sto solo cercando di imparare Prolog b) Lo si potrebbe pensare, ma ho passato la metà migliore di un giorno cercando di trovare una risposta a questa domanda senza alcun risultato – shaungus