Здравствуйте, Mamut, Вы писали:
M>>>При этом с ПМ рекрсия по списку тривиальна
SR>>Неужели считаете, что цикл нетривиален?
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 мне поможет это написать?
SR>>Как-то определили, что мне знаком erlang?
M>Ну, мы ж про паттерн-матчинг говорим? А тут вполне себе паттерн-матчинг. Вполне понятный даже незнакомому с Эрлангом 
Ладно попробую, хотя смысл ok слабо понятен. Какое-то ключевое слово в erlang, видимо. Так что пока без ok.
private Response getResponse() {
return new Response(list (
list ( "HTTP/1.1", 200, "OK" ),
list (
"Content-Type: text/html; charset=UTF-8",
"Content-Length: 0" ),
list ( "" )
));
}
public void parse() {
Response response = getResponse();
Any _ = new Any();
Match version = new Match(), responsePhrase = new Match(), headers = new Match(), body = new Match();
if (response.matches( list ( list (version, 200, responsePhrase), headers, body ))) {
System.out.println(responsePhrase.value);
}
if (response.matches( list (_, _, body))) {
System.out.println(body.value);
}
if (response.matches( list ( list (_, 200, _), headers, body))) {
System.out.println(headers.value);
}
}
M>Ну, в исходномАвтор: z00n
Дата: 14.12.07
сообщении был приведен и пример кода их компилятора 
Какого компилятора? Была приведена только функция упрощения выражения. Потому что Одерски показывал только сопоставление с образцом.
Я уже приводил ссылку на полную версию программы на Scala.
Кстати код на Java, который был приведен в исходном сообщении, вроде бы тоже не руками написан, а с применением спец-компилятора Java
M>Вообще-то на одном только изолированом примере показать/доказать что-то сложно.
M>Надо привести два-три примера, где ПМ позволяет использовать одинаковый подход к решению проблемы, а язык без ПМа требует каждый раз нового подхода (здесьАвтор: SmbdRsdn
Дата: 22.04.08
— реализация метода equals, здесьАвтор: SmbdRsdn
Дата: 24.04.08
— функции с применением if-ов).
M>А ПМ в итоге позволяет читать код, как книгу, без необходимости пробираться сквозь дебри if-ов и попыток понять, что же автор хотел сказать тем или иным циклом 
Какие дебри? Даже if'а в if'e нет. Замените if на case и вот практически код на erlang. Или там дебри case'ов?
SR>>Гм, по вашему одна большая функция не разбитая на малые превращается сразу в язык программирования Tom. Интересная способ рассуждений.
M>Или в нечто ему подобное. Потому что мы же хотим некую общую функцию, которая поможет разбирать образцы не только на одном примере разбора веб-форм 
Списки — простой случай, повторяю в который раз. Неужели сомневаетесь, что можно написать обобщенную функцию разбора?
SR>>Нет. Вспомните, я и код такого вида не приводил.
M>Ну, для калькулятора был код с term.equals, для проверки веб-=форм был код с if'ами. Для этого конкретного примера term.equals не подойдет, потому что нам не всегда все значения нужны. Так что if-ы 
Если бы вы внимательно посмотрели на код с equals то увидели бы, что там далеко не все значения используются в дальнейшем.
M>Это, возможно, ограничения языков и/или JVM.
В Nemerle тоже сопоставляются только варианты.
M>На простых просто как раз и начинается- а вот тут я могу if'ом, а вот тут — функцией...
M>Хотя... Опять же. ПМ предлагает одинаковый подход к решению всех приведенных здесь примеров. Который еще и очень легко читается.
не вижу различий, еще раз считайте что if это case.