2012-10-15 1 views
1

Je vous serais reconnaissant si vous m'expliquiez cette question. Je réfléchis depuis un certain temps mais je n'arrivais pas à le comprendre. Je suis un auto-apprenant et c'est un exercice du site icampustutor du MIT.Type de données renvoyé à partir de l'expression du schéma

Indiquez le type de chacune des procédures suivantes. Utilisez les symboles "->" pour indiquer "mappage vers", par exemple, le carré de la procédure a le type "nombre-> nombre". Utilisez les termes suivants pour décrire les types de données primitifs: nombre, booléen, chaîne.

1- (définie (bar essai n) (if (bar n) n (barre d'essai (n + 2))))

2- (définie (test foo bar n) (if (bar n) #t (tester la barre de foo (+ n (foo n)))))

3- (define (tester la barre) (si (bar n) (+ 1 (foo n)) (tester la barre (n + 3))))

4- (lambda (ab) (+ a (si b 1 0)))

5- (lambda (x) (lambda (y) (+ xy))

6- (lambda (x y comp) (si (comp x y) (+ x 1) (+ y 1)))

Merci pour toute aide.

+1

Pouvez-vous reformuler votre question afin qu'il soit plus spécifique, et pas seulement "résoudre ce problème pour moi"? Que diriez-vous de demander à propos d'un seul d'entre eux, et d'expliquer ce que cela rend difficile pour vous. –

+0

Je suis d'accord avec Johh, ici. Vous répétez simplement une question à laquelle vous avez été confronté, ne montrant aucune pensée ou effort de votre part. – itsbruce

Répondre

1

Vos trois premières expressions lient lambdas au symbole "test". Le problème vous demande de déduire les types de foo et de bar de la façon dont la fonction est utilisée et comment le résultat de cette fonction est utilisé. Voilà ce que je sortirai de lire ce code:

  1. (n> mrds) -> n

    C'est-à-dire, le test prend deux paramètres, le premier étant un lambda qui prend un certain nombre et renvoie une valeur booléenne, et le second étant un nombre, et le résultat de la fonction est un nombre

  2. (n-> n n-> bn) -> b

  3. (n-> n n -> bn) -> n

De même pour 4,5,6, sauf bien sûr le résultat de l'expression est un lambda lui-même, et n'est lié à rien.

  1. (nb) -> n

  2. n -> (n> n)

    C'est à dire, le résultat de cette lamba est un autre lambda qui prend un certain nombre et retourne un numéro.

  3. (nn (nn) -> b) -> n

    Prendre deux chiffres et un lambda qui prend deux nombres et retourne un booléen

Questions connexes