Кортежи в языках программирования
От: NeoCode  
Дата: 24.10.12 09:34
Оценка: 1 (1)
Пытаюсь построить идеальную модель кортежей в некотором языке программирования.
Кортеж — это просто некоторая группа объектов (переменных, констант), не имеющая собственного типа, а существующая на этапе компиляции просто для удобства.
Записывается просто как список объектов в круглых скобках через запятую.

Такие варианты использования выглядят наиболее логично и красиво:

1. возврат нескольких значений из функции
(int,char,float) Foo()
{
  return (100,'a',3.14);
}


2. групповые операции
(i,j,k) = (1,2,3);


3. множественные операции
(i,j,k) = 100;
myobj.(i, c, f) = (100, 'q', 0.25);
sum += (i, j, k);


4. групповая и множественная индексация массивов (раскрытие массива в кортеж)
arr[2,4,8] = (10, 20, 30);
arr[10,20,30] = 0;
arr[indexes[0..size-1]] ++;


На простых примерах вроде все хорошо, но дальше начинаются противоречия и ужасы.
— поведение таких групп внутри сложных выражений ?
— простая, понятная и правильная логика обработки операций над двумя и более кортежами разных размеров ?
— передача кортежей в функции; по аналогии с возвращаемыми значениями, список аргументов функции тоже кортеж, но если возможен например инкремент сразу трех переменных, то что делать если программист хочет вызвать функцию сразу для трех переменных?
Foo((i,j,k)); //???
— соответственно, получение множественного возврата из обычных функций, в которые передали кортеж (по аналогии с операциями!)
(d1,d3,d3,d4) = sin(0.2, 0.4, 0.6, 0.8); // double sin(double x)
— ну и если рассматривать наложение ситуаций множественного возврата и множественных аргументов, то вообще бред получается.

Посмотрел в Питоне, там это просто структура данных. В Nemerle немного ближе (есть "раскрытие" кортежа в группу переменных) но "множестенных" операций и прочих наворотов нет.
Интересно было бы посмотреть, существует ли что-то похожее на эти идеи в других языках?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.