【发布时间】:2019-05-30 10:59:56
【问题描述】:
我正在学习 Clojure 以将其与 Quil 一起使用来制作生成艺术,我想尝试更多地了解 let 函数和 reader 宏。
我尝试从文档中阅读阅读器宏,但找不到明确的答案。
我目前有这段代码:
(let [dabs (take 10 (repeatedly #(make-watercolor
(mkpt
(randomNormal 0.1 0.9)
(randomNormal 0.1 0.9))
(w (randomNormal 0.4 0.7)))))]
(draw-multiple-watercolor dabs 3))
这很丑陋,而且不可读。 我想精简重复的函数,将其拆分成更小的部分,但由于这些部分将被多次评估并且内部具有随机性,我无法将它们的结果存储在变量中并使用它,而是需要在需要时评估它们。
我的问题是:有没有办法做这样的事情
(let [randCoord (randomNormal 0.1 0.9) ;This..
randPoint (mkpt randCoord randCoord) ;..and this doesn't should be evaluated here, but on the repeatedly function calls
dabs (take 10 (repeatedly #(make-watercolor
randPoint ;Evaluation here
(w (randomNormal 0.4 0.7)))))]
(draw-multiple-watercolor dabs 3))
【问题讨论】:
-
你觉得
(let [make-wc-fn #(make-watercolor ...), dabs (take 10 (repeatedly make-wc-fn))] ...)丑吗?我认为是嵌套而不是匿名函数的使用使代码变得一团糟。给这个函数起自己的名字,它就不再被定义在一个嵌套很深的地方。