Кортежи в baseLanguage из MPS

Feb 28, 2009 17:25


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

Leave a comment

Comments 2

pod_baobabom February 28 2009, 15:39:24 UTC
А нахрена, спрашивается, именовать элементы n-ок? Такого рода контейнер с именованными элементами - это уже не n-ка, а запись. И для них свои правила для проверки изоморфности. Наиболее классический пример таковых записей - Standard ML.
У элемента n-ки же уже есть идентификатор - его номер. В большинстве случаев он не нужен, потому как n-ка преимущественно используется в pattern-matching'е как то:

p match {
case (x, _) => foo(x)
case (_ , s@"abc") => bar(s)
}

Если сильно нужно сослаться на конкретный элемент, можно не изобретать велосипед, а сделать как это принято:

val snd = (1, 2)._2

Reply

krlz February 28 2009, 16:23:48 UTC
Да, это скорее не n-ка, а n-ко запись. Такая реализация была выбрана из-за того, что, хотелось сделать все, как можно проще, без проверки изоморфности, зачем она маленькому вспомогательному типу. Другой причиной именования было неуклюжесть паттерн матчинга в императивном языке. Не хочется разводить блок, чтобы обратиться к элементу, ну а обращение по номеру выглядит очень низкоуровнево. У нашего подхода, кстати, есть и плюсы, например, функций, возвращаюящая несколько элементов, может дать им длинные имена, что логично, тк они документируют ее, но в том коде, который их используют их можно переименовать, и использовать имена покороче.

Вообще, в MPS можно реализовать и тот вариант, что предлагаешь ты. Расширения языков совместимы друг с другом, и можно использовать альтернативный синтаксис, если не нравится стандартный.

Reply


Leave a comment

Up