www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

franzigoth1

Gepostet:
11.12.2007 16:26

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    
 
Siracusa

Gepostet:
11.12.2007 20:38

   
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