Declaratieve Talen/oplossingAlternatieveOrdes: verschil tussen versies

Uit Wina Examenwiki
Naar navigatie springen Naar zoeken springen
Geen bewerkingssamenvatting
Roald (overleg | bijdragen)
Geen bewerkingssamenvatting
Regel 1: Regel 1:
Een oplossing voor het eerste deel van de opgave. Het is een beetje Prolog-generate-and-test geïnspireerd.
Een oplossing voor het eerste deel van de opgave. Het is een beetje Prolog-generate-and-test geïnspireerd.
 
<nowiki>
  import List
  import List
   
   
Regel 38: Regel 38:
  (elemIndex c1 letters) < (elemIndex c2 letters) && correcteOrde t letters
  (elemIndex c1 letters) < (elemIndex c2 letters) && correcteOrde t letters
   
   
  permuteer::[a]-><nowiki>[[a]]</nowiki>
  permuteer::[a]->[[a]]
  permuteer [] = [[]]
  permuteer [] = [[]]
  permuteer (h:t) = concatMap (permIns h) (permuteer t)
  permuteer (h:t) = concatMap (permIns h) (permuteer t)
  permIns::a->[a]-><nowiki>[[a]]</nowiki>
  permIns::a->[a]->[[a]]
  permIns x [] = <nowiki>[[x]]</nowiki>
  permIns x [] = [[x]]
  permIns x (h:t) = (x:h:t) : map (\l -> h:l) (permIns x t)
  permIns x (h:t) = (x:h:t) : map (\l -> h:l) (permIns x t)
</nowiki>
--[[Gebruiker:Roald|Roald]] 13 jan 2010 19:55 (UTC)
--[[Gebruiker:Roald|Roald]] 13 jan 2010 19:55 (UTC)

Versie van 13 jan 2010 20:19

Een oplossing voor het eerste deel van de opgave. Het is een beetje Prolog-generate-and-test geïnspireerd.

 import List
 
 berekenorde::[String]->[String]
 berekenorde woorden = filter (correcteOrde paren) (permuteer letters)
 	where 
 		paren = woordenNaarParen woorden
 		letters = findLettersWoorden woorden
 
 woordenNaarParen::[String]->[(Char, Char)]
 woordenNaarParen list = nub $ woordenNaarParen' list
 woordenNaarParen' [] = []
 woordenNaarParen' (w:t) =
 	verwerkWoorden t w ++ woordenNaarParen t
 
 verwerkWoord::String->String->Maybe (Char, Char)
 verwerkWoord "" _ = Nothing
 verwerkWoord _ "" = Nothing
 verwerkWoord (c1:t1) (c2:t2)
 	| c1 /= c2 = Just (c1,c2)
 	| otherwise = verwerkWoord t1 t2
 
 -- geef woord en zoek naar paren met behulp van andere woordenlijst
 verwerkWoorden::[String]->String->[(Char, Char)]
 verwerkWoorden woorden woord = 
 	[ x | Just x <- map (verwerkWoord woord) woorden]	
 
 
 -- alle letters van alle woorden
 findLettersWoorden::[String]->[Char]
 findLettersWoorden lijst = 
 	nub $ concatenate lijst
 
 correcteOrde::[(Char,Char)]->[Char]->Bool
 correcteOrde [] letters = True
 correcteOrde ((c1,c2):t) letters = 
 	(elemIndex c1 letters) < (elemIndex c2 letters) && correcteOrde t letters
 
 permuteer::[a]->[[a]]
 permuteer [] = [[]]
 permuteer (h:t) = concatMap (permIns h) (permuteer t)
 permIns::a->[a]->[[a]]
 permIns x [] = [[x]]
 permIns x (h:t) = (x:h:t) : map (\l -> h:l) (permIns x t)
 

--Roald 13 jan 2010 19:55 (UTC)