У Haskell есть переменные?

В Chromium доступно фиксированное количество экземпляров контекста WebGL, 16: https://code.google.com/p/chromium/issues/detail?id=226868

Возможно, у вас одновременно открыто более 17 вкладок или у вас есть одна или контекст с комбинированным разрешением пикселей более 16 * 1024 * 1024.

31
задан Community 23 May 2017 в 12:34
поделиться

5 ответов

Haskell по умолчанию имеет неизменяемые переменные (переменные в математическом смысле):

 foo x y = x + y * 2

По умолчанию переменные не являются изменяемыми ячейками .

В Haskell также есть изменяемые ячейки, хотя , но вы включаете их явно:

 > import Data.IORef (newIORef, readIORef, writeIORef)
 > v <- newIORef 0
 > readIORef v
 0

 > writeIORef v 7
 > readIORef v
 7

Итак, ДА В Haskell есть истинные переменные. Но по умолчанию изменяемые переменные не используются.

51
ответ дан 27 November 2019 в 21:56
поделиться

Да, в Haskell есть переменные. Рассмотрим (по существу эквивалентные) определения

inc n = n + 1
inc = \n -> n + 1

В обоих случаях n является переменной; он будет принимать разные значения в разное время. В отчете Haskell в разделе 3 они явно называются переменными.

То, что n здесь переменная, может быть легче увидеть, если мы рассмотрим следующая полная программа:

inc n = n + 1
f = inc 0
g = inc 1
main = print (f+g)

Ответ, конечно же, будет "3". При вычислении f , когда мы расширяем inc x , примет значение 0 , а при более позднем (или более раннем!) Вычислении g , поскольку мы расширяем inc x , примет значение 1 .

Некоторая путаница могла возникнуть из-за того, что Haskell, как и другие языки, перечисленные в вопросе, это язык с одним присваиванием: он не позволяет переназначать переменные в пределах области видимости. Как только n присвоено значение 42 , оно не может быть ничем иным, кроме 42 без введения новой области видимости с новой n (которая является другой переменной, затеняя другой n ) связан с другим значением.

Это может быть не совсем очевидным в некоторых контекстах, например в выражениях, использующих do :

 do let n = 1
    print n
    let n = 2
    print n

, но если вы удалите синтаксический сахар переводя его на Haskell без do , становится ясно, что была создана новая вложенная область видимости, где n во внутренней области видимости представляет собой другую переменную, которая затеняет ] n во внешней области:

(let n = 1 
  in (print n >> (let n = 2
                   in print n)))
5
ответ дан 27 November 2019 в 21:56
поделиться

" Я слышал, что в Haskell нет переменных. Это правда? »

Нет .

« Так есть ли в нем переменные или нет, и почему? »

Да.

РЕДАКТИРОВАТЬ: Мой ответ вызывает двойное отрицание, что естественно сбивает с толку, потому что вопрос заголовка положительный, а тело - нет. :)

EDIT2: Отредактировано снова, так как OP изменил вопрос.

3
ответ дан 27 November 2019 в 21:56
поделиться

Согласно [ Википедия] ( http://en.wikipedia.org/wiki/Variable_ (программирование)) , да, в Haskell есть переменные:

В компьютерном программировании переменная - это идентификатор (обычно буква или word), который связан со значением, хранящимся в памяти системы, или выражением, которое можно вычислить. Например, переменная может называться «total_count» и содержать число.
В императивных языках программирования к значениям обычно можно получить доступ или изменить их в любое время. Однако в чисто функциональных и логических языках переменные привязаны к выражениям и сохраняют одно значение в течение всего срока их существования из-за требований ссылочной прозрачности. В императивных языках такое же поведение демонстрируют константы, которые обычно противопоставляются нормальным переменным.

Не то чтобы все определения Википедии, конечно, заслуживают полного доверия.

Страница о [математических переменных] ( http://en.wikipedia.org/wiki/Variable_ (математика)) может предоставьте дополнительную информацию об этом.

3
ответ дан 27 November 2019 в 21:56
поделиться

Простой ответ: да, в Haskell есть переменные, как определено в Раздел 3.2. отчет Haskell . Переменные могут появляться в шаблонах и, таким образом, могут быть привязаны к значению с помощью таких конструкций, как let , case и понимание списка.

Возможно, в ваших вопросах подразумевается, правильно ли задана переменная называется переменной, если она неизменяема. Я думаю, что другие ответы в достаточной степени охватывают изменчивость.

Переменные могут появляться в шаблонах и, таким образом, могут быть привязаны к значению с помощью таких конструкций, как let , case и понимание списка.

Возможно, в ваших вопросах подразумевается, правильно ли задана переменная называется переменной, если она неизменяема. Я думаю, что другие ответы в достаточной степени охватывают изменчивость.

Переменные могут появляться в шаблонах и, таким образом, могут быть привязаны к значению с помощью таких конструкций, как let , case и понимание списка.

Возможно, в ваших вопросах подразумевается, правильно ли задана переменная называется переменной, если она неизменяема. Я думаю, что другие ответы в достаточной степени охватывают изменчивость.

9
ответ дан 27 November 2019 в 21:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: