Jump to content

Recommended Posts

Posted

Boa noite

Comecei a muito pouco tempo no haskell e estou a resolver exercícios básicos . Preciso de ajuda porque não consigo finalizar uma resolução.E o que parece algo básico me raptou umas horas sem conseguir 😞

Faz favor me ajudem perceber isso ,ou como fazer, ou que esta de errado

Obrigada

Quero escrever listas de compreensão que gerem as seguintes listas:

["a0","a1","a2","a3","b0","b1","b2","b3","c0","c1","c2","c3","d0","d1","d2","d3","e0","e1","e2","e3"]

["ab","ac","bb","bc","cb","cc","db","dc","eb","ec"]

No segundo caso tudo que soube fazer foi o seguinte:

Hugs> [(x,y) | x <- ['a'..'d'], y <- ['b','c']]

[('a','b'),('a','c'),('b','b'),('b','c'),('c','b'),('c','c'),('d','b'),('d','c')]

Aguardarei uma ajuda.

obgd

Posted (edited)

leia,

Se tiveres em conta que uma String é o mesmo que [Char], então passas a saber que "ab" é o mesmo que ['a','b'], o que é bastante útil.

Corrigindo o exemplo que quase conseguiste fazer:

Prelude> [ [x,y] | x <- ['a'..'e'], y <- "bc" ]
["ab","ac","bb","bc","cb","cc","db","dc","eb","ec"]

Essencialmente, tu estavas a criar pares (x,y) quando devias criar uma lista com eles. Já agora, repara como eu usei ali "bc" em vez de ['b','c'] -- era mais compacto, mas tem o mesmo significado.

O raciocínio para o primeiro caso é semelhante. Pista: não tentes usar [0..3] mas sim ['0'..'3'] (ou seja, não utilizes os números directamente mas sim os caracteres que os representam).

Meta-dica: rever os tipos de dados básicos de Haskell e como converter números para Char, para String e vice-versa.

Edited by pwseo
Posted (edited)

Qualquer uma das seguintes maneiras funciona:

[[x,y] | x <- ['a'..'d'], y <- ['b','c']]
[[x]++[y] | x <- ['a'..'d'], y <- ['b','c']]
[x:[y] | x <- ['a'..'d'], y <- ['b','c']]
[x:y:[] | x <- ['a'..'d'], y <- ['b','c']]

A lógica é que no Haskell uma string é, literalmente, uma lista de characters (ou tem o tipo [Char], por isso para "concatenar" os dois caracteres tens simplesmente que criar uma lista que os contenha como elementos.

Edited by fabriceleal
Posted (edited)

Muito obrigada pela ajuda.

Percebi o erro que estava a fazer.

Ja agora resolvi a primeira tendo em conta as dicas e obtive o resultado pretendido

Hugs> [ [x,y] | x <- ['a'..'e'], y <- ['0'..'3'] ]
["a0","a1","a2","a3","b0","b1","b2","b3","c0","c1","c2","c3","d0","d1","d2","d3","e0","e1","e2","e3"]

Ja agora tentei fazer diferente e quero uma opinião se esta bem feito ou não usei de maneira correta o concat

Hugs> [concat[[x],[y]] | x <- ['a'..'e'], y <- ['0' .. '3']
["a0","a1","a2","a3","b0","b1","b2","b3","c0","c1","c2","c3","d0","d1","d2","d3","e0","e1","e2","e3"]

Hugs> [concat[[x],[y]] | x <- ['a'..'e'], y <- ['b', 'c']]
["ab","ac","bb","bc","cb","cc","db","dc","eb","ec"]

Agradeço mais uma vez a vossa ajuda.

Leia

Edited by pwseo
tags [code].
Posted (edited)

Esse concat é completamente desnecessário. Funciona, é verdade, mas por que motivo escreverias “concat [[x],[y]]” cujo resultado é simplesmente “[x,y]”, quando podes escrever directamente “[x,y]”?

Essa forma de “escrever diferente” não é muito válida porque simplesmente introduzes uma operação adiconal cuja simplificação é novamente a forma anterior (e complicas o código em termos de legibilidade).

Edited by pwseo
Posted (edited)

leia,

Se calhar isto nunca te ocorreu (sei que é comum os iniciados não se aperceberem disto), em Haskell a maioria do teu código pode ser simplificado de formas simples (de certa forma tal como simplificas expressões matemáticas).

Ou seja, é claro que podemos escrever 3×a + 3×b + 3×c em vez de 3×(a+b+c), mas a segunda forma é mais legível e tem o mesmo significado. A questão do concat ali era precisamente a mesma.

Continua com a aprendizagem, rapidamente ultrapassarás estas pequenas dificuldades se persistires 🙂

Edited by pwseo

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
×
×
  • 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.