Ir para o conteúdo
Polmax

Subtrair datas

Mensagens Recomendadas

Polmax

eu tenho data DataN = D Dia Mes Ano        que ja foram declarados como Int

quero saber como pego neste DataN e subtraio a outro DataN

ou seja 11 12 93 e 3 12 94 iria devolver 1 que seria uma idade no caso (so quero subtrair o ano)

eu tenho

idade :: DataN -> Nome -> TabDN -> Maybe Int

idade d n [] = Nothing

idade d n (x:xs) | n == (fst x) = Just ( aqui quero pegar no x e subtrair d , tendo em conta que x é um tuplo e que so me interessa o segundo valor deste tuplo porque o primeiro é uma string ou seja TabDN :: [(Nome,DataN)]  )

                | otherwise = d n xs

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Polmax

ou seja

idade :: DataN -> Nome -> TabDN -> Maybe Int

idade d n [] = Nothing

idade d n (x:xs) | n == (fst x) = Just subData d - x (agora supostamente eu teria que usar pattern matching e usar so o DataN da cabeça mas eu nao sei fazer isso :X )

                | otherwise = d n xs

      where subData ::DataN -> DataN -> Int

            subData (D a1 b1 c1) (D a2 b2 c2) = c1-c2

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

Não invocas subData d - x, o d e o x são 2 parâmetros passados à função subData. Além disso, se x é um par com um DataN no 2º elemento tens de lhe aceder:

idade d n (x:xs) | n == (fst x) = Just (subData d (snd x))

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Polmax

obrigado o erro que disseste eu logo que escrevi a mensagem vi , nem tinha notado que tinha escrito aquilo.

ja funciona . outra coisa neste caso fst e snd da jeito pk sao so dois elementos mas e se for um tuplo com 3 , 4 etc ? tenho que definir outra funçao auxiliar ?

ou poderia por exemplo fazer algo assim    idade d n ((nome,nacionalidade,data):xs) | n == nome = Just (subData d data

)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

Podes fazer das duas maneiras.

A 2ª solução é um caso de pattern-matching. Estás a dizer que o 1º elemento da lista segue o padrão de um tuplo (onde dás um identificador a cada elemento que te interesse manipular).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Polmax

obs estava a usar data que é um nome reservado, nem me lembrei e agora ja percebo melhor o pattern matching

muito obrigado ;)

agora é enfrentar o teste

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.