История изменений
Исправление DRVTiny, (текущая версия) :
Мысль конечно интересная, но вопрос как раз в том и заключается, что по сути-то непонятно, какого типа значение следует возвращать.
Человек передаёт в ассоциативный массив ключ - и ожидает на выходе... чего он ожидает, если он заранее не знает, соответствует ли ключ 1-му значению или нескольким значениям?
Предположим, он ожидает получить ссылку на некий вектор - в таком случае вариант получается универсальным, но косяк в том, что: а) привычный всем «вырожденный» ассоциативный массив так себя не ведёт; б) если на самом деле значение всего одно, а используется «полноценный» А.М. часто - необходимость доставать что-то из вектора будет неминуемо... несколько раздражать.
Если он ожидает получить просто одно значение, то непонятно, как быть в случае с пересечениями: выдать ему произвольное одно значение из N возможных? Или выдать некое UNKNOWN в том или ином виде?
И здесь по-моему вопрос не в том, насколько соверщенны языки того или иного типа, вопрос сугубо логический и... организационный :)
Т.е. нужно прежде всего понимать концептуально, что такое «ассоциации» с точки зрения универсальной системы понятий, не привязанной к IT-технологиям как таковым. Т.е. нужно на минутку вспомнить о том, для чего человек пользуется какими-то языками программирования, а не пишет напрямую машинные коды в hex-редакторе: язык программирования «транслирует» человеческую логику и систему понятий в набор инструкций, понятных исполнительным устройствам.
С моей точки зрения расхожая фраза «это явление вызывает у меня множество ассоциаций» - вполне объясняет то, что да, всё-таки ничего странного нет в том, чтобы возвращать несколько ассоциаций по значению ключа. Это всё равно как если бы Вам сказали «солёный бриз», «ароматная хвоя» - и попросили назвать ассоциации. А.М. полноценного типа как раз и есть по существу модель человеческой ассоциативной памяти.
Другое дело, что также верно и то, что хотелось бы всё-таки влиять на объём получаемой «ассоциативной» информации. Например, если вы хотите получить из памяти испытуемого только одну ассоциацию для «солёного бриза» - Вы, очевидно, должны иметь такую возможность.
Т.е. в действительности для случая полноценного А.М. неизбежны ситуации, когда помимо самого ключа Вам захочется передать хотя бы такой настроечный параметр, как «вид возвращаемого значения: вектор или единичное».
И здесь-то как раз Perl показывает себя весьма неплохо, поскольку в любую возвращающую что-либо функцию там передаётся неявный, но очень полезный параметр: тип контекста вызова. Это значит, что даже в функции, которой передано только значение ключа (tied hash FETCH), как минимум можно узнать, чего от нас хотят сейчас: единичное значение -скаляр или множество значений-вектор.
Но это скорее из области «хаков», а в нормальном общем случае полноценный ассоциативный массив может быть реализован либо синтаксически «похоже» на вырожденные А.М. - как встроенное средство самого ЯП, либо всё-таки - как явный набор методов какого-нибудь «объекта, принадлежащего классу AssocDict» :)
Исправление DRVTiny, :
Мысль конечно интересная, но вопрос как раз в том и заключается, что по сути-то непонятно, какого типа значение следует возвращать.
Человек передаёт в ассоциативный массив ключ - и ожидает на выходе... чего он ожидает, если он заранее не знает, соответствует ли ключ 1-му значению или нескольким значениям?
Предположим, он ожидает получить ссылку на некий вектор - в таком случае вариант получается универсальным, но косяк в том, что: а) привычный всем «вырожденный» ассоциативный массив так себя не ведёт; б) если на самом деле значение всего одно, а используется «полноценный» А.М. часто - необходимость доставать что-то из вектора будет неминуемо... несколько раздражать.
Если он ожидает получить просто одно значение, то непонятно, как быть в случае с пересечениями: выдать ему произвольное одно значение из N возможных? Или выдать некое UNKNOWN в том или ином виде?
И здесь по-моему вопрос не в том, насколько соверщенны языки того или иного типа, вопрос сугубо логический и... организационный :)
Т.е. нужно прежде всего понимать концептуально, что такое «ассоциации» вообще с точки зрения универсальной системы понятий, не привязанной вообще к IT-технологиям как таковым.
С моей точки зрения расхожая фраза «это явление вызывает у меня множество ассоциаций» - вполне объясняет то, что да, всё-таки ничего странного нет в том, чтобы возвращать несколько ассоциаций по значению ключа. Это всё равно как если бы Вам сказали «солёный бриз», «ароматная хвоя» - и попросили назвать ассоциации. А.М. полноценного типа как раз и есть по существу модель человеческой ассоциативной памяти.
Другое дело, что также верно и то, что хотелось бы всё-таки влиять на объём получаемой «ассоциативной» информации. Например, если вы хотите получить из памяти испытуемого только одну ассоциацию для «солёного бриза» - Вы, очевидно, должны иметь такую возможность.
Т.е. в действительности для случая полноценного А.М. неизбежны ситуации, когда помимо самого ключа Вам захочется передать хотя бы такой настроечный параметр, как «вид возвращаемого значения: вектор или единичное».
И здесь-то как раз Perl показывает себя весьма неплохо, поскольку в любую возвращающую что-либо функцию там передаётся неявный, но очень полезный параметр: тип контекста вызова. Это значит, что даже в функции, которой передано только значение ключа (tied hash FETCH), как минимум можно узнать, чего от нас хотят сейчас: единичное значение -скаляр или множество значений-вектор.
Но это скорее из области «хаков», а в нормальном общем случае полноценный ассоциативный массив может быть реализован либо синтаксически «похоже» на вырожденные А.М. - как встроенное средство самого ЯП, либо всё-таки - как явный набор методов какого-нибудь «объекта, принадлежащего классу AssocDict» :)
Исправление DRVTiny, :
Мысль конечно интересная, но вопрос как раз в том и заключается, что по сути-то непонятно, какого типа значение следует возвращать.
Человек передаёт в ассоциативный массив ключ - и ожидает на выходе... чего он ожидает, если он заранее не знает, соответствует ли ключ 1-му значению или нескольким значениям?
Предположим, он ожидает получить ссылку на некий вектор (это я так всегда одномерный массив называю, привычка) - в таком случае вариант конечно получается универсальным, но косяк в том, что: а) привычный всем «вырожденный» ассоциативный массив так себя не ведёт; б) если на самом деле значение всего одно, а используется «полноценный» А.М. часто - необходимость доставать что-то из вектора будет неминуемо... несколько раздражать.
Если он ожидает получить просто одно значение, то непонятно, как быть в случае с пересечениями: выдать ему произвольное одно значение из N возможных? Или выдать некое UNKNOWN в том или ином виде?
И здесь по-моему вопрос не в том, насколько соверщенны языки того или иного типа, вопрос сугубо логический и... организационный :)
Т.е. нужно прежде всего понимать концептуально, что такое «ассоциации» вообще с точки зрения универсальной системы понятий, не привязанной вообще к IT-технологиям как таковым.
С моей точки зрения расхожая фраза «это явление вызывает у меня множество ассоциаций» - вполне объясняет то, что да, всё-таки ничего странного нет в том, чтобы возвращать несколько ассоциаций по значению ключа. Это всё равно как если бы Вам сказали «солёный бриз», «ароматная хвоя» - и попросили назвать ассоциации. А.М. полноценного типа как раз и есть по существу модель человеческой ассоциативной памяти.
Другое дело, что также верно и то, что хотелось бы всё-таки влиять на объём получаемой «ассоциативной» информации. Например, если вы хотите получить из памяти испытуемого только одну ассоциацию для «солёного бриза» - Вы, очевидно, должны иметь такую возможность.
Т.е. в действительности для случая полноценного А.М. неизбежны ситуации, когда помимо самого ключа Вам захочется передать хотя бы такой настроечный параметр, как «вид возвращаемого значения: вектор или единичное».
И здесь-то как раз Perl показывает себя весьма неплохо, поскольку в любую возвращающую что-либо функцию там передаётся неявный, но очень полезный параметр: тип контекста вызова. Это значит, что даже в функции, которой передано только значение ключа (tied hash FETCH), как минимум можно узнать, чего от нас хотят сейчас: единичное значение -скаляр или множество значений-вектор.
Но это скорее из области «хаков», а в нормальном общем случае полноценный ассоциативный массив может быть реализован либо синтаксически «похоже» на вырожденные А.М. - как встроенное средство самого ЯП, либо всё-таки - как явный набор методов какого-нибудь «объекта, принадлежащего классу AssocDict» :)
Исходная версия DRVTiny, :
Мысль конечно интересная, но вопрос как в том и заключается, что непонятно, какого типа значение возвращать.
Человек передаёт в ассоциативный массив ключ - и ожидает на выходе... чего он ожидает, если он заранее не знает, соответствует ли ключ 1-му значению или нескольким значениям?
Предположим, он ожидает получить ссылку на некий вектор (это я так всегда одномерный массив называю, привычка) - в таком случае вариант конечно получается универсальным, но косяк в том, что: а) привычный всем «вырожденный» ассоциативный массив так себя не ведёт; б) если на самом деле значение всего одно, а используется «полноценный» А.М. часто - необходимость доставать что-то из вектора будет неминуемо... несколько раздражать.
Если он ожидает получить просто одно значение, то непонятно, как быть в случае с пересечениями: выдать ему произвольное одно значение из N возможных? Или выдать некое UNKNOWN в том или ином виде?
И здесь по-моему вопрос не в том, насколько соверщенны языки того или иного типа, вопрос сугубо логический и... организационный :)
Т.е. нужно прежде всего понимать концептуально, что такое «ассоциации» вообще с точки зрения универсальной системы понятий, не привязанной вообще к IT-технологиям как таковым.
С моей точки зрения расхожая фраза «это явление вызывает у меня множество ассоциаций» - вполне объясняет то, что да, всё-таки ничего странного нет в том, чтобы возвращать несколько ассоциаций по значению ключа. Это всё равно как если бы Вам сказали «солёный бриз», «ароматная хвоя» - и попросили назвать ассоциации. А.М. полноценного типа как раз и есть по существу модель человеческой ассоциативной памяти.
Другое дело, что также верно и то, что хотелось бы всё-таки влиять на объём получаемой «ассоциативной» информации. Например, если вы хотите получить из памяти испытуемого только одну ассоциацию для «солёного бриза» - Вы, очевидно, должны иметь такую возможность.
Т.е. в действительности для случая полноценного А.М. неизбежны ситуации, когда помимо самого ключа Вам захочется передать хотя бы такой настроечный параметр, как «вид возвращаемого значения: вектор или единичное».
И здесь-то как раз Perl показывает себя весьма неплохо, поскольку в любую возвращающую что-либо функцию там передаётся неявный, но очень полезный параметр: тип контекста вызова. Это значит, что даже в функции, которой передано только значение ключа (tied hash FETCH), как минимум можно узнать, чего от нас хотят сейчас: единичное значение -скаляр или множество значений-вектор.
Но это скорее из области «хаков», а в нормальном общем случае полноценный ассоциативный массив может быть реализован либо синтаксически «похоже» на вырожденные А.М. - как встроенное средство самого ЯП, либо всё-таки - как явный набор методов какого-нибудь «объекта, принадлежащего классу AssocDict» :)