crislanio_macedo Posted March 18, 2014 Report Share Posted March 18, 2014 Pessoal queria saber como entrar com um numero e a saida ser um numero com os seus digitos invertidos: Entrada : Um inteiro positivo x Saida : Um inteiro positivo equivalente a x, mas com os dígitos na ordem inversa exemplo: reverso' :: Int -> Int E X : --rev 3491 ==> 1943 {-segue a forma como estava a fazer, mas creio que essa apesar de dá uma resposta correta, o prototipo da função não está como desejado, tenho que ou na função listaPraInteiro recebo uma lista e devolvo um elemento, ou na função rev' recebo um inteiro e devolvo uma lista, como poderia fazer de tal forma que receba um inteiro e devolva um inteiro em ordem reversa ? -} dMod x = (x `mod` 10) dDiv x =(x `div` 10) rev' :: Int -> [int] rev' x | x<10 = [x] -- error "Entrada invalida" |otherwise= if (dDiv x) >10 then (dMod x):rev' (dDiv(x)) else dMod(x):[dDiv (x) ] listaPraInteiro:: [int]->Int -> Int listaPraInteiro [] a= 0 listaPraInteiro (x:xs) a= 10 * listaPraInteiro (xs) (a-1) + x Link to comment Share on other sites More sharing options...
Rui Carlos Posted March 19, 2014 Report Share Posted March 19, 2014 Na função listaPraInteiro o segundo argumento é para quê? Olhando para o que tens, a função reverso' será definida compondo as funções listaPraInteiro e rev'. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
crislanio_macedo Posted March 19, 2014 Author Report Share Posted March 19, 2014 (edited) dMod x = (x `mod` 10) dDiv x =(x `div` 10) {- nessa função recebe-se um numero e retorna uma lista em ordfem reversa. -} rev' :: Int -> [int] rev' x | x<10 = [x] -- error "Entrada invalida" |otherwise= if (dDiv x) >10 then (dMod x):rev' (dDiv(x)) else dMod(x):[dDiv (x) ] {- nessa função recebe-se uma lista e um numero e retorna um numero em ordfem reversa. -} listaPraInteiro:: [int]->Int -> Int listaPraInteiro [] a= 0 listaPraInteiro (x:xs) a= 10 * listaPraInteiro (xs) (a-1) + x {- como foi visto o que queria realmente era receber um numero e retorna-lo em ordem reversa.Para isso não sei como proceder, espero que me ajudem, na medida do possível pois estou a precisar , sou iniciante nesse paradigma tão importante e queria desenvolver essa questão da maneira certa. -} Edited March 19, 2014 by thoga31 Tags code + GeSHi Link to comment Share on other sites More sharing options...
thoga31 Posted March 19, 2014 Report Share Posted March 19, 2014 Sim, já percebemos isso. Já viste e compreendeste a sugestão do @Rui Carlos? Já respondeste à questão dele? Também não entendi qual o propósito do segundo argumento da função listaPraInteiro. Knowledge is free! Link to comment Share on other sites More sharing options...
crislanio_macedo Posted March 20, 2014 Author Report Share Posted March 20, 2014 (edited) Bom pessoal eu não ei como proceder como o moderador está a dizer, bom o argumento 'a' na função listPraInteriro acredito que como especificado não está a servir muito. dMod x = (x `mod` 10) dDiv x =(x `div` 10) rev' :: Int -> [int] rev' x | x<10 = [x] -- error "Entrada invalida" |otherwise= if (dDiv x) >10 then (dMod x):rev' (dDiv(x)) else dMod(x):[dDiv (x) ] listaPraInteiro:: [int]->Int listaPraInteiro [] = 0 listaPraInteiro (x:xs) = 10 * listaPraInteiro (xs) + x --isso ainda retorna uma lista ! quero pegar um numero e retornar um numero em orderm inversa reverse' x =reverse [listaPraInteiro x] Edited March 20, 2014 by thoga31 Tags code + GeSHi Link to comment Share on other sites More sharing options...
thoga31 Posted March 20, 2014 Report Share Posted March 20, 2014 (edited) O que faz rev'? Cria uma lista com os números por ordem inversa. O que faz listaPraInteiro? Tranforma uma lista num número. O que precisas de fazer? Uma função que combine as funções: Relembro como se faz a composição de funções: h = f . g Portanto, h será a função "f após g". E tu precisas do quê? "listaPraInteiro após rev'". Certo? Edited March 20, 2014 by thoga31 Knowledge is free! Link to comment Share on other sites More sharing options...
crislanio_macedo Posted March 21, 2014 Author Report Share Posted March 21, 2014 Bom pessoal eu não sabia dessa notação de composição de função, fiz dessa forma e deu certo. Mas como ficaria a composição de função dessa função ? rev :: Int -> Int rev x = listaPraInteiro (reverse (rev' x)) --com composição de função. rev' :: Int -> Int rev' =listaPraInteiro.reverse.inteiroPraLista --deu certo valeu a todos.! 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