2016-11-02 6 views
1

Я новичок в Haskell, и я читаю «Учите вас в Haskell для Great Good!».«let» и переменные в Haskell

В качестве функций можно использовать выражение, определяющее «имя» и «пробел», а затем «параметры». Рассмотрим следующий код:

doubleMe = 2 

этот код на самом деле следует правилу выше, чтобы мы могли видеть его в качестве функции. но мне кажется, что присваивает операции в java или C++.

Итак, как понять переменную в Haskell?

+0

вам нужно решить, что такое doubleme на самом деле, вы использовали переменную слова .... почему? –

+0

Вы пишете программу Haskell (файл .hs) или используете ghci? В ghci вам нужно разрешить, в обычном исходном файле вы этого не сделаете. – immibis

+2

Также я не могу сказать, задаете ли вы вопрос: «В чем разница между переменной и функцией?» или вы спрашиваете: «В чем разница между использованием« let »и не использованием« let »?» – immibis

ответ

4

На верхнем уровне программы name = expression является Определение. Он создает переменную, в смысле математической переменной - просто имя для некоторого выражения. Это может быть определение значения:

two :: Int 
two = 2 

Или определение функции:

twice :: Int -> Int 
twice x = x * two 

Определение относится к функции, если его тип имеет функцию стрелка ->.

В do блоке или GHCi, let name = expression является локального определения.

main :: IO() 
main = do 
    let greet name = "Hello, " ++ name ++ "!" 
    putStrLn (greet "world") 

Наконец, есть еще одно применение let ключевого слова: let name = expression1 in expression2. Это создает переменную, локальную для одного выражения:

length (let x = "hello" in x ++ x) == 10 
+1

Обратите внимание, что 'let' в блоке' do' - это просто синтаксический сахар для вложенного блока 'do':' let let foo = ...; ... 'это то же самое, что' do let foo = ... in do ... '. – chepner