Можно ли удалить последний элемент из кортежа безопасным способом для произвольной арности?
Я хочу что-то вроде этого:
[A,B,C] abc = [a,b,c];
[A,B] ab = removeLast(abc);
Можно ли удалить последний элемент из кортежа безопасным способом для произвольной арности?
Я хочу что-то вроде этого:
[A,B,C] abc = [a,b,c];
[A,B] ab = removeLast(abc);
Нет, к сожалению, это невозможно, причина в том, что тип кортежа представлен в системе типов в виде связанного списка экземпляров Tuple
, но система типов не может выражать циклы или рекурсию в сигнатуре функции. (И наличие циклов/рекурсии почти наверняка сделает систему типов неразрешимой.)
Одним из способов, которым мы могли бы, в принципе, решить эту проблему в будущем, было бы иметь встроенный примитив функция типа, которая оценивает тип последнего элемента типа кортежа.
Под «примитивной» функцией типа я подразумеваю функцию типа, которая не может быть написана на самом языке, но вместо этого предоставляется компилятором как встроенная.
В настоящее время на Цейлоне нет таких функций примитивного типа, но есть пара других подобных проблем, которые можно решить таким образом.