2017-06-01 4 views
0

Dans le schéma, vous définissez des fonctions commefonctions Définition Schéma de style en Common Lisp, sans defun

(define f (lambda (x) ...)) 

En particulier, vous pouvez faire quelque chose comme ça

(define f (g)) 

où g est une fonction de retour une fonction. Est-il possible de faire la même chose en Common Lisp, c'est-à-dire d'associer un symbole de fonction à une fonction anonyme donnée?

Répondre

1

de Nevermind, je viens de trouver la réponse dans le livre de Paul Graham ANSI Common Lisp (après avoir regardé la deuxième fois, p 99.):

(setf (symbol-function 'f) (lambda (x) (* x x))) 

permette d'obtenir (pour la plupart des fins) le même que

(defun f (x) (* x x)) 
+0

'defun' fait beaucoup plus que cela. '(macroexpand '(defun f (x) (* x x)))' – Sylwester

+0

C'est pourquoi j'ai qualifié l'instruction avec "pour la plupart des intentions et des fins". Ceci est également mentionné dans le livre de Graham. – BlenderBender

+0

"Pour la plupart des intentions et des fins" est assez subjective. Si vous compilez des fichiers, 'defun' informe le compilateur de la fonction pour éviter les avertissements de référence dans le même fichier, même si la fonction est déclarée après les références. La plupart des implémentations annotent où ils ont trouvé des définitions telles que 'defun's, de sorte qu'un IDE ou Emacs + Slime peut y accéder. Vous n'en avez pas avec 'setf' de' symbol-function'. – acelent