Re[8]: [Nemerle] Непонятки с variant-ами и match-ингом
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 17.01.07 06:32
Оценка:
Да, кстати, Влад.

В Хаскеле есть такой тип () с единственным значением (). И если мы допустим имеем параметризованный ADT, то в принципе можно записать конструктор типа со значением ():
data N1 a = List a
let x = N1 () in ...


Если в Немерле есть тоже значение (), то тебе понадобится уже ключевое слово, чтобы отделять переменные от конструкторов.

Либо N1 может быть функцией без параметров, но хотя вызов функции не может быть в паттерне (или в Немерле может?), неоднозначность возникнет при создании:
print_expr (multiply_out (Times (Value N1(), Plus (Value N2(), Value N3()))))
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[9]: [Nemerle] Непонятки с variant-ами и match-ингом
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.01.07 15:47
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Как минимум некрасиво. Это то же самое, что требовать скобочки для любого энума или константы. Немного усложни пример, и ты сам потеряешься в скобках:

LCR>
LCR>data Day = Sun | Mon | Tue | Wed | Thu | Fri | Sat
LCR>data Month = Jan | Feb | Mar | Jun | Jul | Aug | Sep| Oct | Nov | Dec
LCR>data Season = Spring | Summer | Autumn | Winter
LCR>

LCR>... и делаем деревце на основе этих типов.

Ты упускаешь из виду одну вещь. Мы ведем разговор не о Хаскеле и не об ОКамле в которых используются системы типов Хиндли-Миллера и безскобочный синтаксис. Мы говорим о языке в котором скобки и переегрузка базовые концепции. Синтаксис конструктора варианта именно такой. Так что разумно было бы ожидать что и в образцах все будет так же. Иначе появляются довольно неприятные ошибки. Человек глядя на паттерн начинает создавать экземпляры вариантов таким же образом (без скобок), а это приводит к тому, что компилятор расценивает такой код как попытку получить ссылку на конструктор. Дале система вавода типов дает сбой в месте несколько ниже от реальной проблемы и программист (не очень опытный) путается не понимая что собственно происходит.

Вторым вариантом устранения неоднозначности могло бы быть соглашение по которому переменные паттернов не имеют право совпадать с именами типов. Это так же подняло бы дуракоустойчивость.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: [Nemerle] Непонятки с variant-ами и match-ингом
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.01.07 15:47
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>В Хаскеле есть такой тип () с единственным значением ().


То в Хаскеле. В Немерле таких неоднозначностей нет, так как вызов функции или конструктора всегда записывается со скобками. Скобки можно использовать как указание пустой операции, но к конфликту это не приводит.

В общем, в Немерле проблемы легко разрешимы. Так что это скорее дань традициям языков где такие проблемы были.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: [Nemerle] Непонятки с variant-ами и match-ингом
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 18.01.07 02:56
Оценка:
VladD2,

VD>Синтаксис конструктора варианта именно такой. Так что разумно было бы ожидать что и в образцах все будет так же.


А ну это другое дело.

VD>Вторым вариантом устранения неоднозначности могло бы быть соглашение по которому переменные паттернов не имеют право совпадать с именами типов. Это так же подняло бы дуракоустойчивость.


Да, согласен.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.