Thread rekursive subroutine
(11 answers)
Opened by kimmy at 2014-02-06 14:52
Ist die Rekursion denn zwingend erforderlich?
Ohne das genaue Anforderungsprofil zu kennen, könnte das unten stehende auch eine Lösung sein; nur ohne Rekursion; voll auflösend mit Grundbedingungen/-annahmen. 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 #! /usr/bin/perl use strict; use warnings; my %data; while ( my $line = <DATA> ) { # skip empty or commented lines next if $line =~ m/^\s*($|#)/; chomp $line; my ( $key, @values ) = split m/\s*[:,]\s*/, $line; # resolve references to previously defined keys (and delete those when resolving) @values = sort map { m/[\d+]/ && exists $data{$_} ? @{delete $data{$_}} : $_ } @values; $data{$key} = \@values; } # check result for my $k ( sort keys %data ) { local $" = ", "; print "$k: @{$data{$k}}\n"; } # RESULT: # [9]: a, b, c, d, e, f, g, h, i, j __DATA__ # [x] : Knoten || a, b : Blaetter # - ein Knoten wird nur ein einziges Mal referenziert # - ein Knoten referenziert nur einen anderen Knoten, der zuvor definiert wurde # - wird ein Knoten referenziert, wird diese Referenz aufgelöst und durch die Blaetter ersetzt [1]: a, b [2]: c, [1] [3]: d, e [4]: f, [3] [5]: g, h [6]: i, [5] [7]: [2], [4] [8]: j, [6] [9]: [7], [8] meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |