F# 参数定义在哪里

F# 参数定义在哪里,f#,F#,这是F中阶乘函数的一个简单实现# 1.rec单词在这里的作用是什么 2-事实是函数,但从来没有提到它可以有一个参数。 所以从技术上讲,它应该面临一个错误,因为在签名中 (let rec fact)没有为其定义参数。 那么它是如何工作的呢?1)rec用于将函数标记为递归函数。如果没有它,您将无法从函数实现中调用它。更多有关MSDN的信息: 2) let rec fact=function是以下各项的快捷方式: let rec fact argument = match argument wi

这是F中阶乘函数的一个简单实现#

1.
rec
单词在这里的作用是什么

2-事实是函数,但从来没有提到它可以有一个参数。 所以从技术上讲,它应该面临一个错误,因为在签名中 (
let rec fact
)没有为其定义参数。 那么它是如何工作的呢?

1)
rec
用于将函数标记为递归函数。如果没有它,您将无法从函数实现中调用它。更多有关MSDN的信息:

2)
let rec fact=function
是以下各项的快捷方式:

let rec fact argument =
   match argument with
   | 0 -> 1
   | n -> n * fact (n-1)
如您所见,有一个单独的参数,它与提供的条件匹配


它被称为模式匹配函数(pattern matching function),在MSDN:

上被描述为一个警告:虽然这是递归101,但它是事实上最糟糕的实现之一(非常慢,会破坏堆栈…)-这里有一个更好的:
让事实n=List.fold(*)1[1..n]
我认为这里令人恼火的一件事是
函数
关键字,它与它的实际功能完全不对应。
let rec fact argument =
   match argument with
   | 0 -> 1
   | n -> n * fact (n-1)