luchhozito Posted December 29, 2009 at 03:25 PM Report Share #302982 Posted December 29, 2009 at 03:25 PM type Inscritos=[Aluno] type Aluno=(Nome,Num,Curso) type Nome=String type Num=Integer type Curso=String Tenho esta função abaixo que tem como objectivo ordenar os Inscritos pelo numero (crescente). ordenada :: Inscritos -> Inscritos ordenada ((a,b,c):xs) = ordenada (filter(\(_,b,_) (< xs)) ++ [(a,b,c)] ++ ordenada (filter(\(_,b,_) -> (>=b) xs)) mas está a dar um erro. Link to comment Share on other sites More sharing options...
Baderous Posted December 29, 2009 at 03:40 PM Report Share #302988 Posted December 29, 2009 at 03:40 PM A definição de quicksort é esta: qsort [] = [] qsort (x:xs) = let mi = filter (<x) xs mai = filter (>=x) xs in qsort mi ++ [x] ++ qsort mai Vê lá o que é que estás a fazer mal. Link to comment Share on other sites More sharing options...
luchhozito Posted December 29, 2009 at 04:31 PM Author Report Share #302999 Posted December 29, 2009 at 04:31 PM não estou a conseguir compilar. 😕 ordenada :: Inscritos -> Inscritos ordenada [] = [] ordenada ((a,b,c):xs) = let mi = filter ((\(_,b,_) -> (<b)) xs) mai = filter ((\(_,b,_) -> (>=b)) xs) in ordenada mi ++ [(a,b,c)] ++ ordenada mai Link to comment Share on other sites More sharing options...
Baderous Posted December 29, 2009 at 05:00 PM Report Share #303002 Posted December 29, 2009 at 05:00 PM Estás a definir um tipo de dados para representar o número com uma palavra reservada: Num. Esta palavra representa uma classe de Haskell, não podes utilizar para dar nomes aos teus tipos. Para além disso, tens aí uns parêntesis a mais no filter e a função < e >= têm tipo Ord a => a -> a -> Bool e da forma que estavas a fazer, o compilador inferia que o tipo era a -> Bool. ordenada :: Inscritos -> Inscritos ordenada [] = [] ordenada ((a,b,c):xs) = let mi = filter (\(_,t,_) -> t<b) xs mai = filter (\(_,t,_) -> t>=b) xs in ordenada mi ++ [(a,b,c)] ++ ordenada mai Link to comment Share on other sites More sharing options...
luchhozito Posted December 29, 2009 at 05:10 PM Author Report Share #303003 Posted December 29, 2009 at 05:10 PM Estás a definir um tipo de dados para representar o número com uma palavra reservada: Num. Esta palavra representa uma classe de Haskell, não podes utilizar para dar nomes aos teus tipos. Para além disso, tens aí uns parêntesis a mais no filter e a função < e >= têm tipo Ord a => a -> a -> Bool e da forma que estavas a fazer, o compilador inferia que o tipo era a -> Bool. ordenada :: Inscritos -> Inscritos ordenada [] = [] ordenada ((a,b,c):xs) = let mi = filter (\(_,t,_) -> t<b) xs mai = filter (\(_,t,_) -> t>=b) xs in ordenada mi ++ [(a,b,c)] ++ ordenada mai eishh... pois. obrigadao Link to comment Share on other sites More sharing options...
luchhozito Posted January 3, 2010 at 06:18 PM Author Report Share #303895 Posted January 3, 2010 at 06:18 PM Utilizando o tipo do primeiro post. type Inscritos=[Aluno] type Aluno=(Nome,Num,Curso) type Nome=String type Num=Integer type Curso=String Objectivo: Calcular a lista de alunos de um dados curso ordenada por número. Dão isto: listagem :: Inscritos -> Curso -> [Num] listagem t c = ordena (filter(==c) t) Exercicio: Apresente uma definição para a função ordena e apresenta o seu tipo ----- minha resolução --- -- saca apenas os numeros da_num :: Inscritos -> [Num] da_num [] = [] da_num ((a,b,c):xs) = [b] ++ da_num xs -- funcao ordena ordena :: Inscritos -> [Num] ordena [] = [] ordena t = da_num (ordenada t) -- ordenar por numero ordenada :: Inscritos -> Inscritos ordenada [] = [] ordenada ((a,b,c):xs) = filter (\(_,t,_) -> t<b) xs ++ [(a,b,c)] ++ filter (\(_,t,_) -> t>=b) xs Link to comment Share on other sites More sharing options...
AJBM Posted January 27, 2012 at 11:01 PM Report Share #435409 Posted January 27, 2012 at 11:01 PM Utilizando o tipo do primeiro post. type Inscritos=[Aluno] type Aluno=(Nome,Num,Curso) type Nome=String type Num=Integer type Curso=String Objectivo: Calcular a lista de alunos de um dados curso ordenada por número. Dão isto: listagem :: Inscritos -> Curso -> [Num] listagem t c = ordena (filter(==c) t) Exercicio: Apresente uma definição para a função ordena e apresenta o seu tipo ----- minha resolução --- -- saca apenas os numeros da_num :: Inscritos -> [Num] da_num [] = [] da_num ((a,b,c):xs) = [b] ++ da_num xs -- funcao ordena ordena :: Inscritos -> [Num] ordena [] = [] ordena t = da_num (ordenada t) -- ordenar por numero ordenada :: Inscritos -> Inscritos ordenada [] = [] ordenada ((a,b,c):xs) = filter (\(_,t,_) -> t<b) xs ++ [(a,b,c)] ++ filter (\(_,t,_) -> t>=b) xs Boas olha podes explicar me como e que esta funcao funciona? Link to comment Share on other sites More sharing options...
AJBM Posted January 27, 2012 at 11:03 PM Report Share #435410 Posted January 27, 2012 at 11:03 PM a funcao de ordenar por numero Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now