在f#中哪个是更好的函数定义样式?

时间:2011-09-19 01:40:21

标签: f# ml

let rec ints = function n -> Link (n+1, ints) 
let rec ints2 n = Link (n+1 ,ints)

其中哪一个是更好的风格?为什么?

2 个答案:

答案 0 :(得分:2)

第二个,因为它更短。第一个是模式match的简称,不会给你买任何东西。

稍微详细一点,第一个相当于

let rec ints n = 
  match n with
  | n -> Link (n+1, ints) 

这是非生产性的,因为它只是将参数n绑定到阴影变量n

答案 1 :(得分:1)

斯蒂芬说,第一个效率低下。

如果您确实需要,可以使用fun关键字:

let rec ints3 = fun n -> Link (n+1, ints)

ints2和ints3在内部表示中几乎相同。我认为总是使用这种语法没有意义,因为它只比ints2长,并且没有任何优势。

澄清:

您应该使用fun关键字,但在更合适的情况下。