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

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

такие структуры данных фактически неизменяемы

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


person Bob    schedule 24.03.2010    source источник


Ответы (6)


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

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

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

person Justin Niessner    schedule 24.03.2010
comment
Также стоит отметить, что неизменяемость - это основная концепция функционального программирования. Важно убедиться, что выражение или функция не вносят изменений в общее состояние программы, что является важным аспектом ссылочной прозрачности. - person Rob; 24.03.2010
comment
Не согласен, есть разные степени настойчивости. - person Matthieu M.; 28.06.2010

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

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

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

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

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

person Norman Ramsey    schedule 24.03.2010

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

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

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

person Steven Huwig    schedule 24.03.2010

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

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

person Vincent Ramdhanie    schedule 24.03.2010

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

person Chuck    schedule 24.03.2010

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

person Pascal Cuoq    schedule 25.03.2010