嵌入式函式呼叫中的括號
在前面的示例中,我們最終不需要括號,因為它們不會影響語句的含義。但是,它們通常需要更復雜的表達,如下所示。
在 C:
plus(a, take(b, c));
在 Haskell 中,這變為:
(plus a (take b c))
-- or equivalently, omitting the outermost parentheses
plus a (take b c)
請注意,這不等於:
plus a take b c -- Not what we want!
有人可能認為,因為編譯器知道 take
是一個函式,它將能夠知道你想將它應用於引數 b
和 c
,並將其結果傳遞給 plus
。
但是,在 Haskell 中,函式通常將其他函式作為引數,並且函式和其他值之間幾乎沒有實際的區別; 所以編譯器不能僅僅因為 take
是一個函式而假設你的意圖。
因此,最後一個示例類似於以下 C 函式呼叫:
plus(a, take, b, c); // Not what we want!