Какой термин использовать при обращении к функциональным структурам данных: постоянный или неизменный? - PullRequest
4 голосов
/ 24 марта 2010

В контексте функционального программирования какой правильный термин использовать: постоянный или неизменный? Когда я гуглю "неизменяемые структуры данных", я получаю ссылку Википедии на статью о "Постоянной структуре данных", в которой даже говорится:

такие структуры данных эффективно неизменное

Что еще больше смущает меня. Функциональные программы полагаются на постоянные структуры данных или неизменные структуры данных? Или они всегда одно и то же?

Ответы [ 6 ]

3 голосов
/ 24 марта 2010

Правильный термин для функциональных структур данных: неизменный . Термин «постоянный» используется как минимум тремя способами:

  • A постоянная структура данных относится к ситуации, когда у вас есть старая структура данных, вы создаете новую, но сохраняете указатель на старую. Обычно старый и новый разделяют много состояний - они могут отличаться только постоянным количеством объектов кучи или, возможно, линейным числом структур данных кучи. Этот тип постоянства является следствием наличия неизменных структур данных, плюс и алгоритм , который сохраняет указатели на старые версии структуры данных, позволяя им сохраняться.

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

  • A постоянный язык программирования - это язык, который обеспечивает постоянные переменные. Святой Грааль - это ортогональное постоянство : программист может решить, является ли переменная постоянной, независимо от всех других свойств этой переменной. На данный момент этот тип языка программирования является далеко идущим исследованием, но полезно сохранить терминологическое различие.

Мне не до редактирования Википедии сегодня: - (

2 голосов
/ 24 марта 2010

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

По-моему, вам не нужно проводить это различие. Если вы программируете на функциональном языке или в полностью функциональном стиле - в отличие от использования функциональных идиом в императивном коде, где это удобно, - вы можете просто сказать «структура данных». По определению они будут неизменными и постоянными.

Если вам по какой-либо причине необходимо провести различие, тогда «постоянный» может быть более подходящим для динамических структур, таких как деревья и очереди, где значения «меняются» на основе трасс выполнения, и «неизменяемыми» для объектов простых значений .

2 голосов
/ 24 марта 2010

Постоянное хранилище данных сохраняет только предыдущую версию после изменения. В зависимости от типа постоянной структуры данных ... вы можете или не сможете изменять предыдущие версии.

Неизменяемый тип не может быть изменен вообще.

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

0 голосов
/ 25 марта 2010

В этой статье авторы используют слово «постоянный» в значении «неизменяемый по наблюдениям, хотя и реализованный с мутациями под капотом». В этом конкретном случае мутации скрыты модульной системой функционального, но не чистого языка программирования.

0 голосов
/ 24 марта 2010

«Неизменяемый» используется гораздо чаще, так как «постоянный» перегружен (обычно это означает «хранится вне программы и вне ее»), и даже правильное определение несет дополнительный смысловой багаж, который часто не связан с отличительным качеством Функциональное программирование - это то, что нет изменяемого состояния. A = A и всегда будет для всех значений A.

0 голосов
/ 24 марта 2010

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

Постоянная структура данных - это не структура данных, предназначенная для постоянного хранения, такого как диск; это другой и несвязанный смысл слова «постоянный».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...