Jump to content

Dúvidas Exercicio


Sir Reng
 Share

Recommended Posts

Boas, venho cá postar 2 exercicios que ando com dúvidas.

1. Apresente uma definição recursiva da funcão (pre-definida):

enumFromTo :: Int -> Int ->[int]

Que constroi a lista dos numeros inteiros compreendidos entre dois limites.

Por exemplo,

enumFromTo 1 5 corresponde a lista

[1,2,3,4,5]

2. Apresente uma definição recursiva da funcão (pre-definida):

enumFromThenTo :: Int -> Int-> Int -> [int]

Que constroi a lista dos numeros inteiros compreendidos entre dois limites e espacados de um valor constante.

Por exemplo:

enumFromTo 1 3 10 corresponde a lista [1,3,5,7,9]

Obrigado a quem me ajudar !

Edited by thoga31
Formatação do tópico
Link to comment
Share on other sites

Sim, BUMP, mas o que já tentaste fazer e quais são as tuas dúvidas?

Não basta colocar os enunciados, ninguém tos vais resolver por ti. Estamos todos dispostos a ajudar. Contudo, se não colocas dúvidas concretas, não conseguimos ajudar.

Knowledge is free!

Link to comment
Share on other sites

Sim, BUMP, mas o que já tentaste fazer e quais são as tuas dúvidas?

Não basta colocar os enunciados, ninguém tos vais resolver por ti. Estamos todos dispostos a ajudar. Contudo, se não colocas dúvidas concretas, não conseguimos ajudar.

O problema é que não consigo resolver pois não estou a ver como fazer :/

Mas entendo, obrigado na mesma :/

--EDIT

Estive a procurar resolução e achei esta

enumFromTo :: Int -> Int -> [int]
enumFromTo m n | m > n = []
         | m <= n = m : enumFromTo (m+1) n

Mas dá-me erro.

Edited by thoga31
GeSHi
Link to comment
Share on other sites

Basta usar as propriedades das listas em Haskell. Vejamos a construção de listas em Haskell recorrendo ao GHCi:

Prelude> [1..5]
[1,2,3,4,5]

Prelude> [1,3..10]
[1,3,5,7,9]

Aplicando estes princípios, teremos o seguinte:

enumFromTo :: Int -> Int -> [int]
enumFromTo a b = [a..b]

enumFromThenTo :: Int -> Int -> Int -> [int]
enumFromThenTo a b c = [a,b..c]

A não ser que estas soluções não te sejam permitidas, estas são as mais elegantes.

Edited by thoga31
  • Vote 1

Knowledge is free!

Link to comment
Share on other sites

Basta usar as propriedades das listas em Haskell. Vejamos a construção de listas em Haskell recorrendo ao GHCi:

Prelude> [1..5]
[1,2,3,4,5]

Prelude> [1,3..10]
[1,3,5,7,9]

Aplicando estes princípios, teremos o seguinte:

enumFromTo :: Int -> Int -> [int]
enumFromTo a b = [a..b]

enumFromThenTo :: Int -> Int -> Int -> [int]
enumFromThenTo a b c = [a,b..c]

A não ser que estas soluções não te sejam permitidas, estas são as mais elegantes.

Eu pensei dessa maneira, mas só que achei demasiado simples e andava a ver outras soluções xd

Amanhã de qualquer maneira digo algo que tenho Programação e pergunto à professora 😛

Edited by Sir Reng
Link to comment
Share on other sites

Existe a possibilidade (provável, de facto) de ser suposto criar as funções sem utilizar o operador .. da linguagem. De facto, esse operador é apenas um artifício sintáctico para as funções que se pede ao aluno para implementar -- caso contrário parece-me um exercício um pouco fútil 🙂

  • Vote 2
Link to comment
Share on other sites

Foi como eu pensei, ela quis mais complexo. xD

enumFromTo' :: Int -> Int -> [int]
enumFromTo' i f = if (i <= f) then (i : (enumFromTo' (i + 1) f)) else []
Edited by thoga31
GeSHi
Link to comment
Share on other sites

O mesmo código que indicaste, mas mais "Haskelliano" 😉

enumFromTo x y | x == y    = []
              | otherwise = x : enumFromTo (x+1) y

enumFromThenTo x y z | x >= z    = []
                    | otherwise = x : enumFromThenTo y (2*y-x) z
Edited by thoga31
  • Vote 1

Knowledge is free!

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.