参数定义在哪里

Sal*_*ara 2 f#

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

let rec fact =function
   | 0->1
   | n-> n * fact(n-1);;



   fact 5
Run Code Online (Sandbox Code Playgroud)

1-这个rec词的作用是什么?

2-事实是功能,但从未提及它可以有一个参数.因此在技术上它应该面对错误,因为在signature(let rec fact)中没有为它定义参数.那它是如何运作的?

Mar*_*zek 6

1)rec用于将函数标记为递归.没有它,你将无法从函数实现中调用它.在MSDN上阅读更多内容:递归函数:rec关键字(F#)

2)let rec fact = function是一个快捷方式:

let rec fact argument =
   match argument with
   | 0 -> 1
   | n -> n * fact (n-1)
Run Code Online (Sandbox Code Playgroud)

如您所见,有一个参数与提供的条件进行模式匹配.

它被称为模式匹配函数,在MSDN上描述:匹配表达式(F#)