Re[14]: Действительно ли ML языки хороши в компиляторописани
От: SmbdRsdn  
Дата: 25.04.08 11:32
Оценка:
Здравствуйте, Mamut, Вы писали:

M>При этом с ПМ рекрсия по списку тривиальна

Неужели считаете, что цикл нетривиален?

M>
M>{ok, {{Version, 200, ReasonPhrase}, Headers, Body}} =
M>      http:request(...
      
M>{ok, {_, _, Body}} = http:request(...


M>{ok, {_, 200, _}, _, _} = http:request(
M>


M>Какой-какой автоматизированый equals мне поможет это написать?

Как-то определили, что мне знаком erlang?

Потом, предлагаю, не отвлекаться каждый раз на свои структуры.
Как повелось сторонниками ФП демонстрировать преимущества сопоставления с образцом на основе структур для условного калькулятора так предлагаю и продолжать.
Нет, если конечно считаете, что у вас какая-то принципиально иная структура, которая в калькулятор не укладывается.

SR>>Странно, стороннику ФП не нравятся отдельные функции. Ну раз не нравятся объедините в одну большую.


M>В какую ону большую? В Tom что ли?

Гм, по вашему одна большая функция не разбитая на малые превращается сразу в язык программирования Tom. Интересная способ рассуждений.

SR>>Пример не более тривиален чем исходный.


M>
M>     | {i,FLT,{'Break',s}} :: z -> return best(emit(sb,s),n,k+#s,z)
M>     | {i,BRK,{'Break',_}} :: z -> return best(nl(sb,i),i,i,z)
M>     | {i,FLT,{'Group',x}} :: z -> return best(sb,w,k,{i,FLT,x}::z)
M>


M>это, я так понимаю, предлагается переписать в виде

M>
M>if(term.m == FLT && term.cell.type == 'Break' && term.cell.data == s)
M>{
M>}
M>else if(term.m == BRK && term.cell.type == 'Break')
M>{
M>}
M>else if(term.m == FLT && term.cell.type == 'Group' && term.cell.data == x)
M>{
M>}
M>


M>?

Нет. Вспомните, я и код такого вида не приводил.

M>Любая, где требуется разбор структур (данных). Сопоставление с образцом — это унифицированый подход к разбору произвольных структур(данных)

Это вы хватили, насчет произвольных структур. Вот например разработчики Tom'а заявляли, что в Tom возможно сопоставлять с образцом более сложные структуры чем в Scala, но все равно не произвольные.

M>>>Просто if поможет только сравнить значения. ПМ позволит наглядно сравнить и структуру и значения.

SR>>Какая структура в вашем-то примере?

M>
M>rules_list         = [fields_and_rules]
M>fields_and_rules   = [field_rules]
M>field_rules        = {field} | {field, Rules}
M>Rules              = Rule | [Rule]
M>Rule               = function | OperatorRule | FunctionRule
M>OperatorRule       = {Operator, value} | (Operator, field)
M>Operator           = '=' | '/=' | '<' | '=<' | '>' | '>='
M>FunctionRule       = {function, value} | {function, field}
M>


M>Как придумал, так и записал.


M>Более того, реализация сильно похожа на то же самое

В реализации многовато дублирования образцов. Практически каждый по два раза.

M>Но у меня, безусловно, простой пример. А есть посложнее. Типа того, что я привел в самом начале.

Про посложнее это понятно. Однако считается, что преимущество сопоставления с образцом видно уже на простых иерархиях.
А у вас странно звучит — да на простой иерархии особой разницы не видно, но если ее навернуть на порядок, тогда преимущество будет очевидно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.