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

В контексте функционального программирования какой правильный термин использовать: постоянный или неизменный?Когда я гуглю "неизменяемые структуры данных", я получаю ссылку в Википедии на статью "Постоянная структура данных", в которой даже говорится:такие структуры данных эффективно неизменныЧто еще больше смущает меня.Функциональные программы полагаются на постоянные структуры данных или неизменные структуры данных?Или они всегда одно и то же?
4 голоса | спросил Bob 24 MarpmWed, 24 Mar 2010 20:13:29 +03002010-03-24T20:13:29+03:0008 2010, 20:13:29

6 ответов


0
Постоянное хранилище данных сохраняет только предыдущую версию после изменения.В зависимости от типа постоянной структуры данных ... вы можете или не сможете изменять предыдущие версии.Неизменяемый тип не может быть изменен вообще.Функциональные языки в первую очередь полагаются на неизменяемые типы (также называемые значениями) для хранения своих данных (даже если вы можете использовать изменяемые типы в некоторых ... но это должно быть сделано явно).
ответил Justin Niessner 24 MarpmWed, 24 Mar 2010 20:21:05 +03002010-03-24T20:21:05+03:0008 2010, 20:21:05
0
Правильный термин для функциональных структур данных является неизменным .Термин «постоянный» используется как минимум тремя способами:Постоянная структура данных относится к ситуации, когда у вас есть старая структура данных, вы создаете новую, но сохраняете указатель на старую.Обычно старый и новый имеют много общего состояния - они могут отличаться только постоянным количеством объектов кучи или, возможно, линейным числом структур данных кучи.Этот тип постоянства является следствием наличия неизменных структур данных, а также алгоритма, который сохраняет указатели на старые версии структуры данных, позволяя им сохраняться.Постоянная переменная - это переменная , значение которой сохраняется в нескольких вызовах одной и той же программы.Это можно сделать с помощью языковых функций или библиотек.Постоянный язык программирования - это язык, который обеспечивает постоянные переменные.Святой Грааль - это ортогональное постоянство : программист может решить, является ли переменная постоянной, независимой от всех других свойств этой переменной.На данный момент этот вид языка программирования является далеко идущим исследованием, но полезно сохранить терминологическое различие.Я не хочу редактировать Википедию сегодня :-(
ответил Norman Ramsey 24 MarpmWed, 24 Mar 2010 22:51:02 +03002010-03-24T22:51:02+03:0010 2010, 22:51:02
0
В статье также говорится, что «в чисто функциональной программе все данные неизменны», и это правда.На мой взгляд, вам не нужно делать это различие.Если вы программируете на функциональном языке или в полностью функциональном стиле - в отличие от использования функциональных идиом в императивном коде, где это удобно, - вы можете просто сказать «структура данных».По определению они будут неизменными и постоянными.Если вам необходимо провести различие по какой-либо причине, тогда «постоянный» может быть более подходящим для динамических структур, таких как деревья и очереди, где значения, как представляется, «меняются» на основе трасс выполнения, и «неизменяемыми» для объектов простых значений.
ответил Steven Huwig 24 MarpmWed, 24 Mar 2010 20:23:57 +03002010-03-24T20:23:57+03:0008 2010, 20:23:57
0
Неизменяемое обычно означает «не меняется».Постоянное обычно понимается как «сохраненный на постоянном носителе».Тем не менее, в статье из Википедии, которую вы упоминаете, кажется, два слова означают очень похожие вещи (но не совсем одинаковые).На самом деле это гласит:Постоянная структура данных - это не структура данных, предназначенная для постоянного хранения, такого как диск;это другой и несвязанный смысл слова «постоянный».
ответил Vincent Ramdhanie 24 MarpmWed, 24 Mar 2010 20:22:10 +03002010-03-24T20:22:10+03:0008 2010, 20:22:10
0
«Неизменяемый» используется гораздо чаще, так как «постоянный» перегружен (обычно это означает «хранится вне программы и вне ее»), и даже правильное определение несет в себе дополнительный смысловой багаж, который часто не связан с отличительным качеством чисто функционального программирования -тот факт, что нет изменяемого состояния.A = A и всегда будет для всех значений A.
ответил Chuck 24 MarpmWed, 24 Mar 2010 20:24:16 +03002010-03-24T20:24:16+03:0008 2010, 20:24:16
0
В этой статье авторы используют слово «персистентный» как означающее «обсервационно неизменный, хотя и реализованный с мутациями под капотом».В этом конкретном случае мутации скрыты модульной системой функционального, но не чистого языка программирования.
ответил Pascal Cuoq 25 MaramThu, 25 Mar 2010 11:54:14 +03002010-03-25T11:54:14+03:0011 2010, 11:54:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132