Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top