2013-02-08 3 views
0

Pour la procédure:Schéma Remplacement Modèle

(define (double fn) (lambda (x) (fn (fn x)))) 

Lorsque vous appelez:

(((double (double double)) 1+) 0) 

Est-ce correct:

(double (lambda (x) (double (double x) 1+) 0)) 
     ((lambda (x) (double^4 x) 1+) 0) 
       ((double^4 1+) 0) 
       (16+ 0) 
        16 

Et De même, lors de l'appel:

(((((double double) double) double) 1+) 0) 

Est-ce exact:

(((double double (double double) double) 1+) 0) 
    (double (double (lambda (x) (double (double x) 1+) 0))) 
    (double (lambda (x) (double^4 1+) 0)) 
      ((lambda (x) (double^16 x) 1+) 0) 
         ((double^16 1+) 0) 
           (256+ 0) 
           256 
+3

Qu'est-ce que «1 +», «16 +», «256 +», «double^4» et «double^16»? – leppie

+0

duplication possible de [fonction de doublage] (http://stackoverflow.com/questions/14742866/doubling-function) – dyoo

Répondre

2

Je recommande le pas à pas DrRacket. Cela vous permet de montrer une étape à la fois. Cela vous permet même de revenir en arrière.

enter image description here

D'abord, je choisi la langue "HTDP: Avancé avec lambda". Puis je suis entré dans ce programme:

(define (double fn) 
    (lambda (x) (fn (fn x)))) 

(((double (double double)) add1) 0) 

Enfin, je cliqué sur le bouton pas à pas.

Questions connexes