Ir para o conteúdo
Kowbak

Duvida Haskell - Listas

Mensagens Recomendadas

Kowbak

Boa tarde

Tenho uma pequena duvida em haskell.

Eu tenho uma função que faz a soma de vários números que estão noutra função.

Ex:  n1 =  [(1.0, "arroz", "arroz"),(1.0,"arroz","arroz")]

n2 =  [(1.0, "arroz", "arroz"),(1.0,"arroz","arroz")]

soma n = sum [ a | (a,b,c) <- n] --temos vários "n" eu escolho um para fazer a soma.

Mas eu agora queria uma função que fizesse a soma de todos as funções "n" e desse o resultado..

Como posso fazer isso?

Desde já muito obrigado pela ajuda.

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Zzz

Pelo que percebi, ele tem uma função que faz a soma do primeiro elemento das listas, e ele quer uma função que faça a soma do primeiro elemento das listas todas, e depois faça a soma total.

n1 = 2.0

n2 = 2.0

Agora tem de haver uma função que some o resultado das duas? é isso que precisas?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Kowbak,

Não sei se percebi bem o que queres, mas uma solução é aplicares a tua função soma a uma lista [n1, n2, ...]

somarTudo l = map soma l

n1 = ...
n2 = ...

resultado = somarTudo [n1, n2]

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Kowbak

Kowbak,

Não sei se percebi bem o que queres, mas uma solução é aplicares a tua função soma a uma lista [n1, n2, ...]

somarTudo l = map soma l

n1 = ...
n2 = ...

resultado = somarTudo [n1, n2]

pedro-kun o que eu queria mesmo era como fazer a soma recursivamente, pois eu posso ter n1, n2, n3, n4 ... etc argumentos, e a função "resultado" que me indicaste só dá para um numero de argumentos já definidos anteriormente. Agradeço a tua ajuda na mesma  :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Kowbak,

No código que eu dei, resultado é uma função constante; chamemos-lhe variável, só para clarificar as coisas. De qualquer modo, essa variável não interessa.

A verdadeira função que eu dei é a somarTudo e essa sim funciona recursivamente. Ali eu passei-lhe apenas [n1, n2] como argumento, mas poderia passar-lhe uma lista com quantos elementos quisesse.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Kowbak

Eu entendo, mas as variaveis(n1,n2...) sou eu que tenho de introduzir antes numa função também do mesmo progama, mesmo assim, por exemplo se eu remover a "n2" da função que me deste numa função já declarada, o progama ao executar não me vai dar qualquer tipo de erro?? 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Kowbak,

As variáveis terão que ser sempre definidas por ti. Se não as quiseres definir individualmente, utiliza uma lista:

lista = [ [(1.0, "arroz", "arroz"), (1.0, "arroz", "arroz")],
          [(1.0, "arroz", "arroz"), (1.0, "arroz", "arroz")] ]

somarTudo lista

Se por acaso estás a perguntar se existe alguma forma da tua função saber que variáveis foram definidas (n1, n2, etc), isso é impossível. E recursividade não é a mesma coisa que o programa adivinhar as variáveis que definiste (algo que é especialmente desencorajado em programação funcional, porque implica que as funções conheçam o resto do programa).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.