Verilen ifadelerden birini rastgele seçip değerlendiren bir makro tanımlamak istiyorum. Örneğin, "1" yarısı kadar zaman ve diğer yarısı "2" yazdırmalıdır.Clojure: Alınan bir formu yerel kapsamda nasıl değerlendirilir?
kullanıyorum çalıştı,
(defmacro equal-chance
[& exprs]
`(rand-nth '~exprs))
ama bu daha ziyade onu değerlendirmek yerine, alıntılanan biçimlerinden biri döndürür (yani aslında "1" baskı yerine (println "1")
dönecekti). Bağlantıları koruduğu için eval
kullanamıyorum. Örneğin, X simgesinin çözümlenemediğinden şikayetçi olur.
Yerel kapsamdaki teklif formunu değerlendirmenin bir yolu var mı? Ya da belki bunun hakkında daha iyi bir yolu var mı?
bu harika çalışıyor! bunu asla kendi başıma düşünemezdim, teşekkürler – Ken
Fn/call yerine bunun yerine gecikme/kuvvet kullanmayı tercih ediyorum: '(force (rand-nth [~ @ (harita (kısmi liste \' gecikme) exprs)])) ' – amalloy