Здравствуйте, 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>Но у меня, безусловно, простой пример. А есть посложнее. Типа того, что я привел в самом начале.
Про посложнее это понятно. Однако считается, что преимущество сопоставления с образцом видно уже на простых иерархиях.
А у вас странно звучит — да на простой иерархии особой разницы не видно, но если ее навернуть на порядок, тогда преимущество будет очевидно.