Почему ленивые языки не поддерживают мутацию?

Я изучаю теорию языка программирования, и я не могу выяснить вескую причину, почему ленивые языки не имеют мутации. Кто-либо знает причину?

7
задан Michael Petrotta 30 May 2010 в 00:30
поделиться

2 ответа

Лень означает, что функция фактически не оценивается до тех пор, пока (или если) не будет использовано ее возвращаемое значение. Это означает, что вызовы функций не обязательно оцениваются в том порядке, в котором они появляются в коде. Это также означает, что не может быть пустых функций, потому что они никогда не будут оцениваться (поскольку невозможно использовать возвращаемое значение, которое не существует).

Однако для функций, которые выполняют побочные эффекты (например, мутацию, но также и просто вывод на экран), имеет значение, в каком порядке они выполняются. Еще важнее то, что они вообще казнены. Это означает, что ленивым языкам нужен способ имитации побочных эффектов в специальных типах, обеспечивающий их выполнение и выполнение в правильном порядке.

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

7
ответ дан 7 December 2019 в 05:18
поделиться

Мутация означает, что вы не можете быть уверены в состоянии программы в любое время, и вам придется беспокоиться о побочных эффектах любого действия. Я действительно думал об этом и не могу придумать никакого способа получить полностью ленивый язык, поддерживающий мутации. (Хотя я не специалист по информатике.)

1
ответ дан 7 December 2019 в 05:18
поделиться
Другие вопросы по тегам:

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