Gepostet: |
Damenproblem | ||||||||||
Hier ist eine mögliche implementierung für das Damenproblem...., kann mir mal einer das unterstrichene erklähren, was macht das programm an der stelle genau??? queens n = queens' n n queens' 0 n = [ [] ] queens' k n = [xs++[(k,m)]| xs<-queens' (k-1) n,m<-[1..n],safe xs (k,m)] safe xs (k,m) = and [frei (i,j) (k,m)|(i,j)<-xs] frei (a,b) (c,d) = (a /= c) && (b/=d) && (a+b/=c+d) && (a-b/=c-d) damen::Int->[(Int,Int)] damen 0 = [] damen 2 = [] damen 3 = [] damen n = (head.queens) n |
|||||||||||
Zum Seitenanfang | ICQ | ||||||||||
Gepostet: |
|||||||||||
Hallo, das dort verwendete Konstrukt nennt sich List Comprehension. Der Aufruf [ f x | x <- lst ] stellt eine Liste dar, die durch Anwendung der Funktion f auf jedes Element aus lst entsteht. Zusätzlich zu dieser Konstruktion kann ein Prädikat p x eingebunden werden: [ f x | x <- lst, p x ]. Die neue Liste wird in diesem Fall nur aus allen Elementen der Liste lst konstruiert, für die p x = True ergibt. In deiner Funktion werden zunächst alle Lösungen queens' (k-1) n berechnet. Für jede Lösung xs wird geprüft, ob safe xs (k,m) mit allen Zahlen aus 1..m erfüllt ist. Ist dies der Fall wird xs++[(k,m)] als neue Lösung in die Resultatliste eingefügt, sonst nicht. Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||