В Chromium доступно фиксированное количество экземпляров контекста WebGL, 16: https://code.google.com/p/chromium/issues/detail?id=226868
Возможно, у вас одновременно открыто более 17 вкладок или у вас есть одна или контекст с комбинированным разрешением пикселей более 16 * 1024 * 1024.
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 есть истинные переменные. Но по умолчанию изменяемые переменные не используются.
Да, в 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)))
" Я слышал, что в Haskell нет переменных. Это правда? »
Нет .
« Так есть ли в нем переменные или нет, и почему? »
РЕДАКТИРОВАТЬ: Мой ответ вызывает двойное отрицание, что естественно сбивает с толку, потому что вопрос заголовка положительный, а тело - нет. :)
EDIT2: Отредактировано снова, так как OP изменил вопрос.
Согласно [ Википедия] ( http://en.wikipedia.org/wiki/Variable_ (программирование)) , да, в Haskell есть переменные:
В компьютерном программировании переменная - это идентификатор (обычно буква или word), который связан со значением, хранящимся в памяти системы, или выражением, которое можно вычислить. Например, переменная может называться «total_count» и содержать число.
В императивных языках программирования к значениям обычно можно получить доступ или изменить их в любое время. Однако в чисто функциональных и логических языках переменные привязаны к выражениям и сохраняют одно значение в течение всего срока их существования из-за требований ссылочной прозрачности. В императивных языках такое же поведение демонстрируют константы, которые обычно противопоставляются нормальным переменным.
Не то чтобы все определения Википедии, конечно, заслуживают полного доверия.
Страница о [математических переменных] ( http://en.wikipedia.org/wiki/Variable_ (математика)) может предоставьте дополнительную информацию об этом.
Простой ответ: да, в Haskell есть переменные, как определено в Раздел 3.2. отчет Haskell . Переменные могут появляться в шаблонах и, таким образом, могут быть привязаны к значению с помощью таких конструкций, как let
, case
и понимание списка.
Возможно, в ваших вопросах подразумевается, правильно ли задана переменная называется переменной, если она неизменяема. Я думаю, что другие ответы в достаточной степени охватывают изменчивость.
Переменные могут появляться в шаблонах и, таким образом, могут быть привязаны к значению с помощью таких конструкций, как let
, case
и понимание списка.
Возможно, в ваших вопросах подразумевается, правильно ли задана переменная называется переменной, если она неизменяема. Я думаю, что другие ответы в достаточной степени охватывают изменчивость.
Переменные могут появляться в шаблонах и, таким образом, могут быть привязаны к значению с помощью таких конструкций, как let
, case
и понимание списка.
Возможно, в ваших вопросах подразумевается, правильно ли задана переменная называется переменной, если она неизменяема. Я думаю, что другие ответы в достаточной степени охватывают изменчивость.