Какой из них является лучшим стилем для определения функции в f #? - PullRequest
2 голосов
/ 19 сентября 2011
let rec ints = function n -> Link (n+1, ints) 
let rec ints2 n = Link (n+1 ,ints)

Какой из них лучше и почему?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2011

Второй, потому что он короче. Первый, являющийся сокращением для паттерна match, ничего не покупает.

Для более подробной информации, первый эквивалент

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

, который непродуктивен, потому что он просто привязывает параметр n к переменной теневого копирования n.

1 голос
/ 19 сентября 2011

Как сказал Стивен, первый неэффективен.

Если вы действительно хотите, вы можете использовать ключевое слово fun:

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

ints2 и ints3 практически идентичны во внутреннем представлении. Я не вижу смысла всегда использовать этот синтаксис, поскольку он просто длиннее, чем ints2, и вообще не имеет никаких преимуществ.

Для уточнения:

Вы должны использовать ключевое слово fun в целом, но в более подходящих сценариях.

...