Паттерн-матчинг - отличие от обычных конструкций
От: SmbdRsdn  
Дата: 22.04.08 16:11
Оценка: :)))
Здравствуйте, z00n, Вы писали:

Z>Здравствуйте, Lazy Cjow Rhrr, Вы писали:


LCR>>Ещё в качестве альтернативы предлагаю вот этот микробенчмарк, названный Jon Harrop Challenge Problem .

Z>Отличная мысль. Аналогично, Одерски как-то хвастался перед явистами паттерн-матчингом на таком примере:
Z>
Z>// SCALA!
Z>class Term
Z>case class Num(n: int)           extends Term
Z>case class Var(name: String)     extends Term
Z>case class Mul(l: Term, r: Term) extends Term
Z>case class Add(l: Term, r: Term) extends Term

Z>// Now let's say we want to implement some simplification rules on such terms.
Z>// Two useful simplifications apply the equalities:
Z>// 0 * x  =  0
Z>// 1 * x  =  x

Z>def simplify(term: Term) = term match {
Z>  case Mul(Num(0), x) => Num(0)
Z>  case Mul(Num(1), x) => x
Z>  case _ => term
Z>}
Z>


Z>Ему ответили, что мултиплай — диспатч на яве — это просто

В чем принципиальное отличие от такого кода на Яве?
    public Term simplify(Term term) {
        _Term x = new _Term();
        if (term.equals(new Mul(new Num(0), x))) return new Num(0);
        if (term.equals(new Mul(new Num(1), x))) return x.value;
        return term;
    }


01.05.08 08:35: Ветка выделена из темы Действительно ли ML языки хороши в компиляторописании
Автор: FR
Дата: 13.12.07
— AndrewVK
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.