EXPR->Lamba [Lisp] (Scheme) - Divers - Programmation
Marsh Posté le 10-10-2004 à 10:14:50
(define (expr->lambda exp)
(lambda x exp))
alors je sais pas si ça marche, si ça marche pas, il doit bien exister dans ta version de scheme un opérateur pour forcer l'évaluation de exp dans (lambda ...), du genre @ ` ou un truc du style.
la syntaxe de lambda je crois que c'est ça, en fait le x c'est l'argument, je sais plus si on le met entre paranthèses...
Marsh Posté le 10-10-2004 à 11:56:04
à priori c'est un bon point de départ, en utilisant l'exemple 1, ca me retourne bien une procédure
jvais tenter de me débrouiller pour l'exemple 2, merci
Marsh Posté le 10-10-2004 à 16:13:41
hum bin jusqu'ici j'ai pas trop trop de résultat
l'exemple 2 ne me retourne que l'expression, il ne l'évalue pas avec la valeur donné (et pas le droit d'utiliser eval)
est-ce que le problème qu'on me demande se résout par ce qui est appelé la currification?
Marsh Posté le 11-10-2004 à 19:53:15
ouais jai pas mal réussi à tout faire
me reste plus qu'à supporter pour l'addition et la multiplication les cas n-aires
ex: (+ 3 4 5) -> présentement mon code ne fait que l'addition des 2 premiers
Marsh Posté le 09-10-2004 à 23:34:02
je suis incapable d'entamer le problème suivant (au moins de faire le define correct )
Définissez une fonction EXPR->LAMBDA qui reçoit comme argument une expression arithmétique en notation préfixe et retourne une fonction correspondant à l'expression. Pour simplifier le problème, vous pouvez assumer que x est la seule variable apparaissant dans l'expression.
ex1:
(EXPR->LAMBDA '(+ x (* 3 (/ (* x x 12) (cos x))) (sin (^ x x))))
===>
#<procedure:...cours\solution.scm:120:2>
ex2:
((EXPR->LAMBDA '(+ x (* 3 (/ (* x x 12) (cos x))) (sin (^ x x)))) 4)
===>
-878.213346158752
donc comme je disais, je sais pas trop comment la procédure doit être défini. Ok, elle recoit 1 paramêtre (appelons le exp) mais celui-ci doit être traité comme un lambda
si quelqu'un y voit plus clair