2013-09-12 2 views
5

Что смысл этой одной линии F # фрагмент кодаОдна линия F # код трудно понять

let x x = x + 2 in x 2;; 

Это справедливо и просто вернуться 4.

Но что это ?? х - функция? это также параметр? также x, кажется, вызывает себя (x 2), но его не помечено знаком «rec».

Может ли кто-нибудь объяснить?

+0

Зачем добавлять тег 'ocaml', а это вопрос' F #? –

+1

@JacksonTale Я не совсем уверен, но это может быть потому, что он связан с необязательным синтаксисом OC, аналогичным F # (что не типично для F #). – mydogisbox

+0

Это не совсем идиоматический код F #. Я настоятельно рекомендую обратиться к кому бы то ни было, чтобы попросить их переписать его. –

ответ

7

Так что давайте попытаемся понять, что происходит.

let x x 

определяет функцию с именем x, который принимает аргумент x.

`let x x = x + 2` 

означает, у вас есть функция x которая принимает аргумент также называется x и возвращает x+2

Заключительная часть in x 2 вызывает функцию с аргументом 2.

Таким образом, функция может быть записана как

let f x = x + 2 
f 2 

который, очевидно, возвращается 4.

+0

"у вас есть функция' x', которая возвращает 'x + 2' ', запутанная.Я бы сказал: «У вас есть функция' x', которая добавляет '2' к аргументу, переданному ему». – lukstafi

7

«В» означает, что он не использует синтаксис света. В основном, in означает, что предварительное связывание определено для следующего выражения. Поскольку in ключевого слова означает, что связывание х справедливо для следующего выражения, другой способ написания это было бы заменить x со значением связывания следующим образом:

(fun x -> x + 2) 2 

Я думаю, что это важно знать того факта, что все привязки работают таким образом, то есть привязки - это способ написания выражений более понятным образом.

Если вы посмотрите here, вы можете узнать больше о более OCaml подобный синтаксис F # имеет в наличии, если у вас есть #light off указанный (on по умолчанию).

2
let x x = x + 2 in x 2;; 

неоднозначность переменные, переименовав внешний x к f:

let f x = x + 2 in f 2;; 

Отступ:

let f x = 
    x + 2 
f 2 

Так определил функцию, которая добавляет два и применяет его к двум, чтобы получить четыре ,

Смежные вопросы