Как называется выражение, эквивалентное оператору присваивания? - PullRequest
0 голосов
/ 24 сентября 2011

В императивном программировании, используя операторы, вы делаете такие вещи, как:

a = 10
b = a * 2
print a # 20

Я думал, что эквивалент в выражениях должен выглядеть примерно так:

print with(a=10){with(b=a*2){return b}}

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

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

1 Ответ

2 голосов
/ 24 сентября 2011

Ну, есть дай-привязки:

let a = 10 in
let b = a * 2 in
b

Они присутствуют в большинстве функциональных языков, хотя иногда и с другим синтаксисом (самый очевидный девиант, который я знаю, это lisp, использующий (let ((a 10)) (let ((b (* a 2))) b)); есть также letrec и let*, которые накладывают различные ограничения на выражения быть назначенным может относиться к). Можно также создать несколько привязок в одном let.

Обратите внимание, что формально она не меняет переменную в течение короткого периода времени, но вводит новую область видимости с новыми переменными.

...