Structure and Interpretation of Computer Programs donne cette implémentation de la fonction d'Ackermann :
(define (A x y)
(cond ((= y 0) 0)
((= x 0) (* 2 y))
((= y 1) 2)
(else (A (- x 1) (A x (- y 1))))))
L'exercice 1.10 demande les "définitions mathématiques concises" des fonctions suivantes qui appellent A
:
(define (f n) (A 0 n))
(define (g n) (A 1 n))
(define (h n) (A 2 n))
Les sorties de f
et g
pour les entiers 1 à 4 sont reconnaissables comme 2n et 2^n. Mais h
est 2^(2^n-1)
, une formule que je n'ai pas pu reconnaître simplement en recherchant un modèle dans les sorties. Comment doit-on compléter cet exercice ? Existe-t-il une méthode pour dériver la notation mathématique, peut-être basée sur la notation de la fonction d'Ackermann ?