LINUX.ORG.RU

Pattern Matching на Java ))


0

0

Не знаю, может боян, но меня сегодня такая идея посетила :)

abstract class Node extends RuntimeException {
}

class Leaf extends Node {
    public final String value;

    public Leaf(String value) {
        this.value = value;
    }
}

class BNode extends Node {
    public final Node left;
    public final Node right;

    public BNode(Node left, Node right) {
        this.left = left;
        this.right = right;
    }
}

public class Main {
    public static void walk(Node node, StringBuffer buf) {
        try {
            throw node;
        } catch (Leaf n) {
            buf.append(n.value);
        } catch (BNode n) {
            walk(n.left, buf);
            walk(n.right, buf);
        }
    }

    public static void main(String[] args) {
        Node node =
            new BNode(new Leaf("1"),
                      new BNode(new BNode(new Leaf("2"),
                                          new Leaf("3")),
                                new Leaf("4")));
        StringBuffer sb = new StringBuffer();
        walk(node, sb);
        System.out.println(sb);
    }
}
★★★★★

Re: Pattern Matching на Java ))

а теперь на человечском Си плз ...

phasma ★☆ ()

Re: Pattern Matching на Java ))

BNode extends Node

в чем смысл вот этой конструкции?

Deady ()

Re: Pattern Matching на Java ))

ээ.. мм.. может быть все-таки continuations заюзать?

dmiceman ★★★★★ ()

Re: Pattern Matching на Java ))

те че надо? я тебе это на перле изображу, наверное, в полстрочки.

vilfred ☆☆ ()
Ответ на: Re: Pattern Matching на Java )) от phasma

Re: Pattern Matching на Java ))

Обход дерева в глубину. Лень писать, на C это будет не интересно. На C++ будет аналог джавовского кода.

Legioner ★★★★★ ()
Ответ на: Re: Pattern Matching на Java )) от dmiceman

Re: Pattern Matching на Java ))

Где взять continuations для джавы, и каким они тут боком? :-)

Legioner ★★★★★ ()
Ответ на: Re: Pattern Matching на Java )) от vilfred

Re: Pattern Matching на Java ))

На перле я и сам могу )) Меньше ста строчек - не ынтырпрайз, ты что ))

Legioner ★★★★★ ()
Ответ на: Re: Pattern Matching на Java )) от Legioner

Re: Pattern Matching на Java ))

> Обход дерева в глубину. Лень писать, на C это будет не интересно. На C++ будет аналог джавовского кода.

если на быдлоязыках интересно .. тогда давай на каком-нить нормальном, например брейнфаке ..

phasma ★☆ ()
Ответ на: Re: Pattern Matching на Java )) от Legioner

Re: Pattern Matching на Java ))

вот объход дерева в глубину:

#!/usr/bin/perl -w
use File::Find;
find \&wanted, '/';
sub wanted {print $count++ if -f $File::Find::name}

чего еще изволите?

p.s. сервер - зюзероутер, тормоза с дисковыми операциями - страшные. Но функцию свою выполняет вне зависимости от скорости быстродействия. Т.е. тут уже не важно, хоть фортран, хоть бейсик, хоть с++, тормоза дисковых операций всю скорострельность с ил ассемблера съедают. Единственная выгода осталась - быстрота написания программы равная 5-ти минутам.

vilfred ☆☆ ()

Re: Pattern Matching на Java ))

за такие извраты с исключениями бить надо, не для того эксепшены придумали чтобы деревьями кидаться

wfrr ★★☆ ()

Re: Pattern Matching на Java ))


так себе. потоковая передача данных через сигналы IMHO забавнее.

// wbr

klalafuda ★☆☆ ()
Ответ на: Re: Pattern Matching на Java )) от Legioner

Re: Pattern Matching на Java ))

> Где взять continuations для джавы,

я не настолько знаю жабу что бы ответить на этот вопрос (вроде бы обещали?)

> и каким они тут боком? :-)

ну как бы.. exceptions -- они не для того, а continuations -- они круче!

dmiceman ★★★★★ ()

Re: Pattern Matching на Java ))

Впринципе инетересно, но как я понял слишком ограничено применимо по сравнению с оргигинальным pm. Например распознать нечто такое BNode(Node(x),Node(y)) только средствами throw-catch нереально. Получается что ты изобрел аналог switch :)

Burbaka ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.