2012-09-24 60 views
2

(cond ((test-1) (expression-1)))

當我使用cond,我可以給(表達式-1)幾個函數?

像這樣:

(cond ((= 1 1) ((fun1) (fun2)))
Scheme:About cond

回答

4

是的,你可以通過在begin包裹它們如下圖所示

(cond ((= 1 1) (begin (fun1) (fun2))) 

注意執行多個表達式:在開始表達式的返回值最後一個表達式的結果,即在這個例子中返回值將是fun2執行

+1

對於'cond',你甚至不需要在結果中使用'begin'(但是,你必須使用''if')。這就足夠了:'(cond((= 1 1)(fun1)(fun2)))' –

7

begin實際上是可選的 - cond(方案以及在的Emacs Lisp,至少)採取多種表情每次測試後的表達,進而評價它們在一個隱含的begin

(cond ((= 1 1) (fun1 ...) (fun2 ...)) 
     (t (something-else))) 

使用#t,而不是t爲計劃

+0

Common Lisp中的每個'cond'子句中都有一個隱含的'progn'('begin'等價物)。我認爲Clojure是不同的,因爲它沒有包含每個子句的附加paren對。 – Inaimathi