Функциональное программирование против переменной и памяти - PullRequest
1 голос
/ 27 сентября 2011

Использует ли функциональное программирование переменные?

Если нет, как функциональные программы занимают память?

Ответы [ 4 ]

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

Как функциональные программы, так и императивные (C #, Java) программы используют переменные, но они определяют их по-разному.

В функциональных программах переменные похожи на те, что в математике, после присвоения значения значение не может измениться.

В императивных языках обычно значения, содержащиеся в переменных, могут быть изменены.

В обоих случаях переменные используют память.

1 голос
/ 27 сентября 2011

Если вы спрашиваете о деталях реализации различных методов компиляции функциональных программ, вам, вероятно, нужно начать с чтения "Реализация функциональных языков: учебное пособие" .Это немного устарело (например, оно не охватывает современный подход STG), но все же ценно.Еще один, более старый текст для чтения - Field, Harrison, "Функциональное программирование" (не говоря уже о названии, в основном речь идет о реализации компиляторов FP).

0 голосов
/ 27 сентября 2011

Использует ли функциональное программирование переменные?

Ну, по крайней мере, вы можете связать имена со значениями. Можно назвать это имя переменной, даже если она не переменная. Но в математике, когда мы видим:

x + 3 = 5

мы называем x переменным, хотя это просто другое имя 2.

Otoh, имена, которые связаны с аргументами функций, действительно являются переменными, если только при разных вызовах функции.

Если нет, как функциональные программы занимают память?

Будут элементы языка для конструирования непримитивных значений, таких как списки, кортежи и т. Д. Такой конструктор данных создает новые значения из старых (где-то в памяти, но эти детали не имеют значения для FP).

0 голосов
/ 27 сентября 2011

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

Функциональные программы занимают память с вызовом функции «стек», т.е.текущее выражение и аргументы рекурсивно вызываемых функций.

...