2017-10-11 1 views
0

suite à cette question Clojure: Expand a var in let binding et solution https://stackoverflow.com/a/20450289/1074389 fournie par @amalloy Je me demandais si je pouvais passer dynamiquement des valeurs à la forme let varsClojure: Développer un var en liaison let valeur dynamique var

Donc, en commençant par le code proposé par @ammlloy ...

(defmacro with-common [& body] 
`(let ~'[x 10, y 20] 
[email protected])) 

(with-common (+ x y)) 

je aurais besoin de cette extension de la fonctionnalité ...

(defmacro with-common [x-val y-val & body] 
`(let ~'[x x-val, y y-val] 
[email protected])) 

(with-common 2 3 (+ x y)) ;; => 5 

Merci d'avance! Juan

Répondre

1

Je me demandais si je pouvais passer des valeurs dynamiquement à la forme let vars

Oui, cette approche semble faire ce que vous voulez:

(defmacro with-common [x-val y-val & body] 
    (let [bindings ['x x-val 'y y-val]] 
    `(let ~bindings [email protected]))) 

(with-common 2 3 (+ x y)) 
;=> 5 
(macroexpand '(with-common 2 3 (+ x y))) 
;=> (let* [x 2 y 3] (+ x y))