Declaratieve Talen/Oplossing haskell nqueens: verschil tussen versies
Naar navigatie springen
Naar zoeken springen
Geen bewerkingssamenvatting |
Geen bewerkingssamenvatting |
||
Regel 5: | Regel 5: | ||
------------------- | ------------------- | ||
nqueens n = let | nqueens n = let | ||
list = [1..n] | |||
permlist = perms list | |||
in | |||
getoklist permlist | |||
Regel 15: | Regel 15: | ||
getoklist [] = error "geen oplossing" | getoklist [] = error "geen oplossing" | ||
getoklist (x:xs) | listok x = x | getoklist (x:xs) | listok x = x | ||
| otherwise = getoklist xs | |||
Regel 22: | Regel 22: | ||
listok [] = True | listok [] = True | ||
listok (a:as) = if (listok2 a as 1) == False then False | listok (a:as) = if (listok2 a as 1) == False then False | ||
else listok as | |||
listok2::Int->[Int]->Int->Bool | listok2::Int->[Int]->Int->Bool | ||
Regel 28: | Regel 28: | ||
listok2 _ [] _ = True | listok2 _ [] _ = True | ||
listok2 a (b:bs) kol | a == (b+kol) = False | listok2 a (b:bs) kol | a == (b+kol) = False | ||
| a == (b-kol) = False | |||
| otherwise = listok2 a bs (kol+1) | |||
Versie van 25 jun 2006 17:20
Mogelijke oplossing
nqueens::Int->[Int] ------------------- nqueens n = let list = [1..n] permlist = perms list in getoklist permlist getoklist::[[Int]]->[Int] ------------------------ getoklist [] = error "geen oplossing" getoklist (x:xs) | listok x = x | otherwise = getoklist xs listok::[Int]->Bool ------------------- listok [] = True listok (a:as) = if (listok2 a as 1) == False then False else listok as listok2::Int->[Int]->Int->Bool ------------------------------ listok2 _ [] _ = True listok2 a (b:bs) kol | a == (b+kol) = False | a == (b-kol) = False | otherwise = listok2 a bs (kol+1) --Permuteer de lijst perms :: [k] -> [[k]] --------------------- perms [] = [[]] perms (x:xs) = concat (map (tussen x) (perms xs)) where tussen e [] = [[e]] tussen e (y:ys) = (e:y:ys) : map (y:) (tussen e ys)