#!/usr/bin/perl
# RDW 2
# 18.07.2004
# author: pq
# usage: skript.pl 1 2 3 4 ...
package main;
use strict;
use warnings;
my @a = @ARGV;
my @res = p(@a);
print "Die Potenzmenge von (@a):\n";
for (sort {
@$a <=> @$b
} @res) {
print "(@$_)\n";
}
sub p {
my @m = @_;
unless (@m) {
# die Potenzmenge der leeren Menge ist die leere Menge
return [];
}
else {
my $el = shift @m;
# um die Potenzmenge einer Menge M herauszufinden,
# nimmt man sich ein Element e und bildet die Potenzmenge PR
# der Restmenge R
# jede Untermenge U in PR verdoppelt man und fügt
# dem Duplikat das Element e hinzu
my @p = map {([@$_, $el], $_)} p(@m);
return @p;
}
}