Re[16]: Действительно ли ML языки хороши в компиляторописани
От: SmbdRsdn  
Дата: 25.04.08 19:15
Оценка: -2 :)
Здравствуйте, 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.