[Lisp] (Scheme) EXPR->Lamba

EXPR->Lamba [Lisp] (Scheme) - Divers - Programmation

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)
 
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

Reply

Marsh Posté le 09-10-2004 à 23:34:02   

Reply

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...


Message édité par antsite le 10-10-2004 à 10:15:15
Reply

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 :)

Reply

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?

Reply

Marsh Posté le 10-10-2004 à 21:47:27    

up :~(

Reply

Marsh Posté le 11-10-2004 à 15:19:10    

zup

Reply

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 :/

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed