Question

ici est le plus code que je ne comprends pas

plus(0,X,X):-natural_number(X).
plus(s(X),Y,s(Z)) :- plus(X,Y,Z).

tout donné:

natural_number(0).
natural_number(s(X)) :- natural_number(X).

Je ne comprends pas ce récursivité. Si je plus(s(0),s(s(s(0))),Z) comment puis-je obtenir la réponse de 1+3=4?

Je besoin d'explications pour le premier code. J'essaie que plus(0,X,X) arrêtera la récursion mais je pense que je le fais mal.

Était-ce utile?

La solution

Alors, commençons par natural_number(P). Lisez ce que « P est un nombre naturel ». On nous donne natural_number(0)., qui nous dit que 0 est toujours un nombre naturel (à savoir qu'il n'y a pas des conditions qui doivent être remplies pour qu'il soit un fait). natural_number(s(X)) :- natural_number(X). nous dit que s(X) est un nombre naturel si X est un nombre naturel. Telle est la définition inductive normale des nombres naturels, mais écrit « à l'envers » comme nous le lisons Prolog « Q: = P ». Comme « Q est vrai si P est vrai »

Maintenant, nous pouvons regarder plus(P, Q, R). Lisez ce que « plus est vrai si P plus Q est égal à R ». Nous examinons ensuite les cas qu'on nous donne:

  1. plus(0,X,X) :- natural_number(X).. Lire l'ajout 0 aux résultats X dans X si X est un nombre naturel. Ceci est notre cas de base inductive, et est la définition naturelle de l'addition.
  2. plus(s(X),Y,s(Z)) :- plus(X,Y,Z). Lire comme « Ajout du successeur de X aux résultats Y dans le Z successeur si vous ajoutez X à Y est Z ». Si nous changeons la notation, nous pouvons le lire algébriquement comme « X + 1 + Y = Z + 1 si X + Y = Z », qui est encore très naturel.

Alors, pour vous répondre à la question directe: « Si je plus(s(0),s(s(s(0))),z), comment puis-je obtenir la réponse de 1 + 3 = 4? », Nous allons examiner comment nous pouvons unifier quelque chose avec z chaque étape de l'induction

  1. Appliquer la deuxième définition de plus, car il est le seul qui unifie avec la requête. plus(s(0),s(s(s(0))), s(z')) est vrai si plus(0, s(s(s(0))), z') est vrai pour certains z
  2. Maintenant, appliquez la première définition de plus, car il est la seule définition unifiant. plus(0, s(s(s(0))), z') si z' est s(s(s(0))) et s(s(s(0))) est un nombre naturel
  3. Déroulez la définition de natural_number quelques fois sur s(s(s(0))) pour voir ce qui est vrai.
  4. Donc, la déclaration générale est vrai, si s(s(s(0))) est unifié avec z' et s(z') est unifié avec z.

Alors l'interprète retourne vrai, avec z' = s(s(s(0))) et z = s(z'), à savoir z = s(s(s(s(0)))). Donc, z est 4.

scroll top