Thread Gibt es ein Modul, um einfach mit verschachtelten Listen zu arbeiten?
(3 answers)
Opened by xubaso at 2009-06-27 23:31
Wenn eine zusammengesetzte Datenstruktur zu komplex im Handling wird (z.B.: AoHoAo....), dann ist es meist geschickter auf Objekte auszuweichen. Selbst komplexe zusammengesetzte Strukturen lassen sich so relativ einfach handhaben. Ohne OOP ist oft Rekursion ein guter Weg.
Mal ein Beispiel zum Arbeiten mit Baumstrukturen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 #!/usr/bin/perl use strict; use warnings; use Data::Dumper; package LispTree; use Moose; # with 'RoleDigraph'; use overload '""' => \&to_s; has 'op' => ( is => 'ro' ); has 'l' => ( is => 'rw' ); has 'r' => ( is => 'rw' ); my $operations = { '*' => sub { $_[0] * $_[1] }, '+' => sub { $_[0] + $_[1] }, '/' => sub { $_[0] / $_[1] }, '-' => sub { $_[0] - $_[1] }, }; sub to_s { my $self = shift; my $o = '(' . $self->op . ' '; $o .= blessed $self->l ? $self->{l}->to_s : $self->l; $o .= ' '; $o .= blessed $self->r ? $self->{r}->to_s : $self->r; $o .= ')'; return $o; } sub to_rpn { my $self = shift; my $o = blessed $self->l ? $self->{l}->to_rpn : $self->l; $o .= ' '; $o .= blessed $self->r ? $self->{r}->to_rpn : $self->r; $o .= ' ' . $self->op; return $o; } sub calc { my $self = shift; my $l = blessed $self->l ? $self->{l}->calc : $self->l; my $r = blessed $self->r ? $self->{r}->calc : $self->r; return $operations->{$self->op}->( $l, $r ); } package main; my $root = LispTree->new( op => '+' ); $root->l(LispTree->new( op => '+', l => 6, r => 6 )); my $leaf = LispTree->new( op => '*', l => 15, r => 2 ); $root->r($leaf); print $root . "\n" x 2 . $root->to_rpn . "\n" . $root->calc . "\n"; Last edited: 2009-06-28 10:51:55 +0200 (CEST) -- yet another amateur perl hacker
|