Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: BobОтветов: 6

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

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

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

functional-programminglanguage-agnosticterminology

Ответы

Ответ 1 · рейтинг 2 · Justin Niessner

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

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

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

Ответ 2 · рейтинг 3 · Norman Ramsey

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

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

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

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

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

Ответ 3 · рейтинг 2 · Steven Huwig

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

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

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

Ответ 4 · Vincent Ramdhanie

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

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

Ответ 5 · Chuck

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

Ответ 6 · Pascal Cuoq

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы