Для чего нужно ключевое слово let в функциональных языках, таких как F # и OCaml? - PullRequest
14 голосов
/ 16 мая 2010

При рассмотрении примеров кода F #, Ocaml и других функциональных языков я замечаю, что ключевое слово let используется очень часто.

  • Зачем тебе это? Почему языки были разработаны, чтобы иметь это?
  • Почему ты не можешь просто оставить это? например, пусть x = 4 становится x = 4

Ответы [ 6 ]

27 голосов
/ 16 мая 2010

В F # (и OCaml) let является довольно мощной конструкцией, которая используется для привязки значения , что означает присвоение некоторого значения символу. Это может означать разные вещи:

Объявление локального или глобального значения - вы можете использовать его для объявления локальных значений. Это похоже на создание переменной в императивных языках, за исключением того, что значение переменной не может быть изменено позже (оно является неизменным):

let hello = "Hello world"
printfn "%s" hello

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

let add a b = a + b
printfn "22 + 20 = %d" (add 22 20)

Зачем вам это нужно? В F # код был бы неоднозначным без него. Вы можете использовать значение, скрывающее , чтобы создать новый символ, который скрывает предыдущий символ (с тем же именем), поэтому, например, следующее возвращает true:

let test () =
  let x = 10
  let x = 20 // hides previous 'x'
  x = 20     // compares 'x' with 20 and returns result

Если вы опустите ключевое слово let, вы не узнаете, сравниваете ли вы значения или объявляете новый символ. Также, как отмечали другие, вы можете использовать синтаксис let <symbol> = <expression> in <expression> (если вы используете разрыв строки в F #, тогда вам не нужно in), чтобы записывать привязки значений как часть другого выражения:

let z = (let x = 3 + 3 in x * x)

Здесь значение z будет 36. Хотя вы можете изобрести некоторый синтаксис, не требующий ключевого слова let, я думаю, что использование let просто делает код более читабельным.

9 голосов
/ 16 мая 2010

Основная цель слова "let" заключается в том, чтобы охватить его определения.

let <definitions> in <expression>

Обеспечивает, чтобы определения не загрязняли пространство имен чего-либо, кроме <expression>.

4 голосов
/ 16 мая 2010

«let» вводит новую область видимости переменных и позволяет связывать переменные со значениями для этой области.Это часто читается как «пусть х будет [значение] в ...».Если у вас нет присваивания, очень полезно избегать конфликтующих имен переменных.

3 голосов
/ 16 мая 2010

В Хаскеле,

foo = let x = 5
      y = 7
      in z=x+y

используется, чтобы прояснить, что x и y являются «частными» переменными для foo.

1 голос
/ 06 июня 2010

Если вы учитесь, эта лекция также может иметь значение, особенно часть об оценке срока сдачи.

1 голос
/ 16 мая 2010

let означает «привязать значение к имени» и обычно произносит, создает новую переменную. x = 4 означает «назначить 4 х», что не создает нового имени.

См. http://msdn.microsoft.com/en-us/library/dd233238.aspx

...