Wuerfeln 2


% wurfeln mit bagof (Wolfgang Menzel)
% wuerfeln(+#Farben des Würfels, +#Würfel, ?Liste mit Anzahl pro Farbe) 

% Problem: bagof kann nur tatsächlich vorhandene Instanzen sammeln
%          d.h. leere bags sind unmöglich
% Trick:   Hinzufügen jeweils einer Instanz pro Würfelfarbe und 
%          anschließend wieder beseitigen
wuerfeln(NoCats,NoDice,Result) :- 
  repeat,
  findall(A,(between(1,NoDice,_),A1 is random(NoCats),A is A1+1),L1),
     % L1: Liste mit den Ergebnissen von NoDice Würfen
  findall(B,between(1,NoCats,B),L2),
     % L2: Liste mit je einem Wurf pro Würfelfarbe
  append(L1,L2,L3),
     % L3: Liste der Wurfergebnisse, erweiter um je einen Wurf pro Farbe
  findall(Z1,(bagof(X,(member(Y,L3),
                      X is Y),
                   L4),
             length(L4,Z),
             Z1 is Z-1),
          Result).
     % L4: für jede Farbe: Liste mit Wurfanzahl + 1 Elementen
     % Trick: X muss im aufzurufenden Ziel ungebunden sein, deshalb X is Y

-- WolfgangMenzel -- 24 Feb 2010
 
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback