2016-07-22 197 views
4

我對F#編程非常陌生。我正在尋找一個答案,爲什麼在達到n = 0條件時,下面的遞歸函數將會退出。 「then 1」語法是否具有等同於EXIT的特殊含義?F#遞歸函數退出?

let rec factorial n = 
    if n = 0 
    then 1 
    else n * factorial (n - 1) 
+1

'if'是一個表達式,函數中的最後一個表達式作爲返回值。 – ildjarn

回答

6

函數式編程語言是表達導向,而不是面向聲明。這意味着一切都是可以評估爲值的表達式。

控制流程結構ifmatch也是表達式。編譯器檢查這些表達式的所有分支是否返回相同的類型。

如果您熟悉其他語言的條件三元運算符,則F#的表達式if true then 1 else 0等於true ? 1 : 0

此外,該功能並不像這樣「退出」。它完成評估。函數的每個實例(將會有n + 1實例)在表達式的末尾完成評估。