Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 10. 05. 2010 13:25

jaj
Zelenáč
Příspěvky: 19
Reputace:   
 

Haskell - uloha

Prosim o radu, jak to naprogramovat, v haskellu mame ted druhou prednasku a nejak to moc nepobiram, dekuji


tridy :: (a -> a -> Bool) -> [a] -> [[a]]

tridy ekv seznam  vrátí třídy rozkladu na množině zadané seznamem podle relace ekvivalence zadané binární funkcí ekv.

> tridy (\x y -> x `mod` 3 == y `mod` 3) [1..10]
[[1,4,7,10], [2,5,8], [3,6,9]]

Offline

  • (téma jako vyřešené označil(a) jaj)

#2 10. 05. 2010 14:52

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4247
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Haskell - uloha

Code:

patri :: a->(a->a->Bool)->[a]->Bool
patri x ekv [] = True
patri x ekv (y:_) = ekv x y

zarad :: a->(a->a->Bool)->[[a]]->[[a]]->[[a]]
zarad x ekv [] stare = [x]:stare
zarad x ekv (t:nove) stare = if (patri x ekv t) then 
  ((x:t):nove) ++ stare 
  else (zarad x ekv nove (t:stare))

tridy :: (a->a->Bool)->[a]->[[a]]
tridy ekv [] = [[]]
tridy ekv (x:seznam) = zarad x ekv (tridy ekv seznam) []

patri -- dostane prvek, ekvivalenci a třídu a rozhodne, zda prvek do třídy patří.
zarad -- dostane prvek, ekvivalenci, nezkontrolované třídy a zkontrolované třídy. Podívá se, jestli prvek patří do první nezkontrolované třídy. Pokud ano, přidá ho do ní a vrátí seznam všech tříd. Pokud ne, přidá ji mezi zkontrolované a jde dál.

Než se budeš ptát ohledně případných nejasností, koukni do materiálů zde: http://fi.muni.cz/~libor/vyuka/IB015/


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#3 10. 05. 2010 15:08

Billy
Příspěvky: 60
Reputace:   
 

Re: Haskell - uloha

Sice ma uz Kondr predbehol ale postnem aj svoje riesenie:

Code:

tridy :: (a -> a -> Bool) -> [a] -> [[a]]
tridy f [] = []
tridy f (x:xs) = (vrat f x (x:xs)):(tridy f (zmaz f x (x:xs)))


vrat :: (a -> a -> Bool) -> a -> [a] -> [a]
vrat f p [] = []
vrat f p (x:xs) = if ( f p x ) then
                      x:(vrat f p xs)
                  else
                      vrat f p xs
                      
zmaz :: (a -> a -> Bool) -> a -> [a] -> [a]
zmaz f p [] = []
zmaz f p (x:xs) = if (f p x) then
                     zmaz f p xs
                  else
                     x:(zmaz f p xs)

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson