大家好,我是對於 Clojure 一無所知的菜鳥小白工程師。
今天我們要來學習 Calling Functions 呼叫函數。
try Clojure here: https://qa-mktg.codingrooms.com/compiler/clojure/
到目前為止,我們其實已經使用到了很多函數呼叫(Calling Functions),比如:
(+ 1 2 3 4)
(* 1 2 3 4)
(first [1 2 3 4])
請記住,所有的 Clojure 操作都具有相同的語法:開始括號、運算子、運算元、結束括號。
函數呼叫(Calling functions)只是另一個術語,表示 運算子是一個函數或函數表達式(返回函數的表達式)
的操作。
像是下方的例子,就不是有效的函數呼叫,因為數字和字符串不是函數:
(1 2 3 4) ("test" 1 2 3)
我們接著來看一個返回 +
(加法)函數的函數表達式:
(or + -)
; => #<core$_PLUS_ clojure.core$_PLUS_@76dace31>
這一串返回值是加法函數的字符串表示。由於 or
函數的返回值是第一個真值,這裡加法函數是真值,所以返回了加法函數。
我們也可以將這個表達式用作另一個表達式中的運算子:
((or + -) 1 2 3)
; => 6
因為(or + -)
返回 +
,這個表達式的值是 1、2 和 3 的和,返回 6 。
下方再舉一些有效的函數呼叫的例子,它們每個都返回 6:
((and (= 1 1) +) 1 2 3)
; => 6
((first [+ 0]) 1 2 3)
; => 6
在第一個例子中, and
的返回值是第一個假值或最後一個真值。在這個例子中,+是最後一個真值,所以它被返回,然後應用於引數 1、2和 3,返回 6。
在第二個例子中, first
的返回值是序列中的第一個元素,在這種情況下是 +
。
今天我們學習了函數呼叫( Calling Functions), 在前幾章節我們就已經在使用了。
它只是另一個術語,用來表示 運算子是一個函數或函數表達式(返回函數的表達式)
的操作。