LINUX.ORG.RU
ФорумTalks

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);
    }
}
★★★★★

Ответ на: комментарий от phasma

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

Legioner ★★★★★
() автор топика
Ответ на: комментарий от vilfred

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

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

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

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

phasma ★☆
()
Ответ на: комментарий от Legioner

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

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

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

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

vilfred ☆☆
()
Ответ на: комментарий от vilfred

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

Причем здесь обход ФС?

tailgunner ★★★★★
()

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

wfrr ★★☆
()


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

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от Legioner

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

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

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

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

dmiceman ★★★★★
()

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

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