LISP lambda fonction
hanane93
Messages postés
13
Date d'inscription
Statut
Membre
Dernière intervention
-
bella -
bella -
Bonjour à tous,
J'espère que vous me répondrez car je suis vraiment en galère.
En lisp, il y a moyen d'utiliser les lambda fonction
Dans le corps de ces fonctions on écrit les instructions mais en fait on ne peut en ecrire plus d'une.
Seulement la premiere est prise en compte.
C'est possible de dejouer tous ca?
ex :de ceux que je vous dire :
(defun test2(x y)
( (LAMBDA (x y) (
(* x y)
(+ x y)
)
)
x y)
)
erreur apparue:
*** - SYSTEM::%EXPAND-FORM: (* X Y) should be a lambda expression
Merci
J'espère que vous me répondrez car je suis vraiment en galère.
En lisp, il y a moyen d'utiliser les lambda fonction
Dans le corps de ces fonctions on écrit les instructions mais en fait on ne peut en ecrire plus d'une.
Seulement la premiere est prise en compte.
C'est possible de dejouer tous ca?
ex :de ceux que je vous dire :
(defun test2(x y)
( (LAMBDA (x y) (
(* x y)
(+ x y)
)
)
x y)
)
erreur apparue:
*** - SYSTEM::%EXPAND-FORM: (* X Y) should be a lambda expression
Merci
A voir également:
- LISP lambda fonction
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
4 réponses
J'espère que cela répond à ta problématique :
Cette version renvoie le résultat de toutes les lignes
Celle-ci renvoie le résultat de la dernière
N.B: J'utilise CMUCL
www.nodewave.com
Cette version renvoie le résultat de toutes les lignes
(defun test2(x y) ( (LAMBDA (x y) ( values (* x y) (+ x y))) x y))
Celle-ci renvoie le résultat de la dernière
(defun test2(x y) ( (LAMBDA (x y) ( progn (* x y) (+ x y))) x y))
N.B: J'utilise CMUCL
www.nodewave.com
Le problème est que defun est une macro qui utilise déjà elle même LAMBDA. La fonction LAMBDA permet une réécriture d'une expression en changeant les arguments.
Il faut donc faire :
(setq test2
( (LAMBDA (x y)
( values
(* x y)
(+ x y)))
x y))
(test2 1 2)
sera transformé en
(LAMBDA (x y)
( values
(* x y)
(+ x y)))
1 2)
Lui même transformé en
( values
(* 1 2)
(+ 1 2))
en gros, je suis un peu rouillé en lisp ça fait bien 20 ans que je n'en ai pas fait
Il faut donc faire :
(setq test2
( (LAMBDA (x y)
( values
(* x y)
(+ x y)))
x y))
(test2 1 2)
sera transformé en
(LAMBDA (x y)
( values
(* x y)
(+ x y)))
1 2)
Lui même transformé en
( values
(* 1 2)
(+ 1 2))
en gros, je suis un peu rouillé en lisp ça fait bien 20 ans que je n'en ai pas fait