Здравствуйте, varenikAA, Вы писали:
AA>, — типичный пример бритвы окама. лишняя сущность в синтаксисе.
Неправильно ты, дядя Федор, про синтаксис думаешь.
Язык это не система аксиом, его упрощать и обеднять до минимума не очень полезно, и даже вредно. Сахар, добавляющий удобства, это чаще хорошо и правильно. Иначе возникает проблема известная как Turing tarpit.
"Beware of the Turing tar-pit in which everything is possible but nothing of interest is easy."
https://en.wikipedia.org/wiki/Turing_tarpit
Здравствуйте, D. Mon, Вы писали:
DM>Здравствуйте, varenikAA, Вы писали:
AA>>, — типичный пример бритвы окама. лишняя сущность в синтаксисе.
DM>Неправильно ты, дядя Федор, про синтаксис думаешь.
Ну хорошо, в данном случае какие преимущества у предложенного способа перед матчем?
Может тогда и для массивов ввести вместо arr[0] arr.0 ?
Вот почему-то в лиспе понятие кортеж вообще не используется. Список.
цитата с мсдн
Как правило, лучше использовать сопоставление шаблонов для доступа к отдельным элементам кортежа.
Здравствуйте, varenikAA, Вы писали:
AA>AA>x.1
AA>
AA>, — типичный пример бритвы окама. лишняя сущность в синтаксисе.
Этот синтаксис — x.[1] — все равно есть в языке, и то, что он здесь не работает — нелогично и странно. А вообще я не понимаю, откуда у некоторых товарищей такое яростное желание защищать *отсутствие* фишек, которые абсолютно нейтральны, ничему не мешают и строятся на имеющемся синтаксисе.
А по поводу "уродливости" C#... Метки для элементов кортежей, которые живут только в компайл-тайме и разруливаются компилятором, — очень даже простое и изящное решение обсуждаемой здесь проблемы. F# стоило бы присмотреться.
Здравствуйте, varenikAA, Вы писали:
AA>Ну хорошо, в данном случае какие преимущества у предложенного способа перед матчем?
Банально меньше буковок, и не придется менять, если тупл при рефакторинге станет длиннее или короче.
AA>Может тогда и для массивов ввести вместо arr[0] arr.0 ?
Это уже экстремизм.
AA>Вот почему-то в лиспе понятие кортеж вообще не используется. Список.
Там обычно есть гетерогенный вектор, который работает как тупл и дает элементы по индексу.
Clojure:
> (let [a ["zero" 1 'two]] (a 2))
two
Racket:
> (let ((v #("zero" 1 two))) (vector-ref v 2))
'two
Есть и еще более прямой вариант кортежей — возврат нескольких значений.
(define (foo x)
(values "hi" x (* x x)))
(let-values ([(a b c) (foo 5)])
(format "~a, ~a and ~a" a b c))
Возвращает "hi, 5 and 25".
Здравствуйте, D. Mon, Вы писали:
AA>>Может тогда и для массивов ввести вместо arr[0] arr.0 ?
DM>Это уже экстремизм.
Свершилось!