Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

lesiano

Função q evoca duas funções;

Mensagens Recomendadas

lesiano

Isso é recursividade "normal". Mas aí tens a função f a evocar ( recursivamente ) a soma.

Eu quero a f a evocar a soma e a multiplica, por exemplo.

( Não consigo pôr + explícito q nos bolds q tenho na primeira posta.  :) )

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Nazgulled

Acho que vais ter que te explicar melhor... O que estás prai a dizer não está a fazer muito sentido e pela pergunta "Dá para ter uma função q evoque duas?" a resposta é sim. É a mesma coisa que teres uma função em C e lá dentro chamares uma data delas, vai dar ao mesmo.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lesiano

nroelem :: [int] -> Int

nroelem [] = x

nroelem l = aqui quero evocar a função nroelem ( drop 1 l ) e a função incrementa

incrementa :: Int -> Int

incrementa x = x+1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rui Carlos

O que é que é suposto a função fazer? Contar o número de elementos da lista? Não percebi de onde vem aquele x.

Podes ter isto:

nroelem :: [int] -> Int
nroelem [] = 0
nroelem l = incrementa (nroelem (drop 1 l))

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lesiano

Sim

Edit: Já vi q assim funciona. Não percebi foi porquê...

i) Qd entra no incrementa como é q ele sabe q o x está a zero?

ii) Não era suporto qd a lista fica vazia ele retornar 0?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rui Carlos

nroelem [1,2,3]

= incrementa (nroelem [2,3])

= incrementa (incrementa (nroelem [3]))

= incrementa (incrementa (incrementa (nroelem [])))

= incrementa (incrementa (incrementa 0))

= incrementa (incrementa 1)

= incrementa 2

= 3

Isto é complicado de explicar  :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lesiano

E aqui, estou a pensar bem?

Conta-ocorrencias: recebe um elemento e uma lista qualquer, retorna o número de ocorrências do elemento na lista

contaocc :: Int -> [int] -> Int
contaocc _ [] = 0
contaocc x l = incrementa ( x == contaocc ( x tail(l)))

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.