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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top