文件說:'做'特殊形式做什麼?
(做exprs *)
評估表達的順序,並返回的最後的值。如果沒有提供表達式,則返回nil。
不過,我只是這樣做:
(defn blah []
(print "how")
(print "now")
(print "brown")
(print "cow")
(+ 1 1))
在由此產生:
hownowbrowncow2
那麼,爲什麼這事再次需要?
文件說:'做'特殊形式做什麼?
(做exprs *)
評估表達的順序,並返回的最後的值。如果沒有提供表達式,則返回nil。
不過,我只是這樣做:
(defn blah []
(print "how")
(print "now")
(print "brown")
(print "cow")
(+ 1 1))
在由此產生:
hownowbrowncow2
那麼,爲什麼這事再次需要?
您可以像if
這樣的形式使用它,它只將單個s-exp作爲「then」或「else」。
(if (= a b)
(do (println "Yes") (something))
(do (println "No") (something-else)))
一般來說,do
是一種特殊形式,允許一個爲了副作用執行幾種形式,大概是因爲do
形式返回其最後形式的評估結果,所以沒有理由使用它具有純粹的功能。簡而言之,您可以將do
視爲非純代碼的某種包裝。在每個Lisp中都有類似的形式,例如在Common Lisp中,它被稱爲progn
。
do
隱含地用於諸如以下的宏:defn
,when
,when-not
和其他。
從實際的角度來看,你可以用if
報表(見Tomo's answer)使用它,當你寫有「體」的參數(如在defn
函數體)宏就派上用場了。
任何想法爲什麼'做'是作爲特殊形式而不是宏來實現的?正如我所看到的,實現這樣一個宏很容易...... – neoascetic 2016-08-03 22:36:05
我想補充說,在'defn'(或'when')中有一個隱式'do'。 – Thumbnail 2014-09-25 10:38:10