這是階乘函數的F#凡定義的參數
let rec fact =function
| 0->1
| n-> n * fact(n-1);;
fact 5
1 - 什麼是這裏的rec
字的作用一個簡單的執行力度?
2-事實是函數,但從未提及它可以有一個參數。 從技術上講,它應該面臨一個錯誤,因爲在簽名 (let rec fact
)中沒有爲其定義參數。 那麼它是如何工作的?
這是階乘函數的F#凡定義的參數
let rec fact =function
| 0->1
| n-> n * fact(n-1);;
fact 5
1 - 什麼是這裏的rec
字的作用一個簡單的執行力度?
2-事實是函數,但從未提及它可以有一個參數。 從技術上講,它應該面臨一個錯誤,因爲在簽名 (let rec fact
)中沒有爲其定義參數。 那麼它是如何工作的?
1)rec
用於標記函數遞歸。沒有它,你將無法從函數實現中調用它。瞭解更多關於MSDN:Recursive Functions: The rec Keyword (F#)
2)let rec fact = function
爲快捷方式:
let rec fact argument =
match argument with
| 0 -> 1
| n -> n * fact (n-1)
正如你可以看到,有這與提供的條件匹配的模式的單個參數。
它被稱爲模式匹配功能和MSDN描述:Match Expressions (F#)
我認爲這裏有一件令人煩惱的事情是'function'關鍵字,它並不完全對應於實際的功能。 – TeaDrivenDev
只是作爲一個警告:雖然這是*遞歸101 *這是事實,最壞的可能實現(很慢的一個,將打擊堆棧,...) - 這裏是一個更好的:'let fact n = List.fold(*)1 [1..n]' – Carsten