2017-06-08 3 views
0

Pour autant que je comprenne #' <object> est l'abréviation de (function <object>).Comportement de "# '" en Lisp

Mais j'ai remarqué un comportement différent lors de l'utilisation #' dans la fonction d'application.

Exemple

(apply '+ '(1 2)) => Works and give 3 
(apply (function +) '(1 2)) => 3 

Cependant

(apply '# '(1 2)) => Err!! 

Répondre

2

Comme décrit dans le reference:

La notation #'name peut être utilisé comme une abréviation pour (function name).

Notez que la syntaxe utilisée est #', pas '#, qui est juste une façon de citer le symbole #, puisque 'a est équivalent à (quote a).

vous devez donc utiliser:

(apply #'+ '(1 2)) 

En général, le caractère # suivi d'un caractère a une signification particulière pour la saisie de valeurs. Par exemple #\ est pour lire des caractères (comme dans # \ Espace), #( pour lire des vecteurs, (comme dans #(1 2 3)), etc

+0

Merci !!! (Erreur stupide de mon côté) – Tanmay

+2

# est le caractère de macro de lecteur par défaut, par convention. On pourrait facilement faire la même chose avec un char de départ différent. – Sylwester

0

La notation # 'est implémentée par le lecteur.

Si vous voulez voir l'effet, vous pouvez par exemple utiliser:

CL-USER 1 > (read-from-string "#'+") 
(FUNCTION +) 
3 

CL-USER 2 > '#'+ 
(FUNCTION +)