J'ai découvert que les formes spéciales ne peuvent être passés comme arguments ou dans des variables, aussi bien dans Clojure:Quelles seraient les conséquences d'autoriser le traitement de formulaires spéciaux en tant que valeurs normales?
user=> (defn my-func
[op]
(op 1 2 3))
#'user/my-func
user=> (my-func +)
6
user=> (my-func if)
java.lang.Exception: Unable to resolve symbol: if in this context (NO_SOURCE_FILE:5)
user=> (def my-if if)
java.lang.Exception: Unable to resolve symbol: if in this context (NO_SOURCE_FILE:9)
et Racket/Système:
> (define (my-func op)
(op 1 2 3))
> (my-func +)
6
> (my-func if)
if: bad syntax in: if
> (define my-if if)
*if: bad syntax in: if
C'est cool, je suis bien avec Cela, je sais que je peux juste écrire une fonction pour envelopper un formulaire spécial, puis passer cette fonction. Mais je voudrais savoir pourquoi Lisps a cette restriction, et quelles conséquences négatives cela aurait permis. Sont-ils des dialectes majeurs qui permettent cela?
Merci pour le nom FEXPR! –