Ir para o conteúdo
lesiano

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

Mensagens Recomendadas

lesiano    0
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


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
Rui Carlos

Não é recursividade, porque a função f não se chama a ele própria.

Mas também podes ter o seguinte:

f a b c = soma a (mult b c)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Nazgulled    8
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


Link para a mensagem
Partilhar noutros sites
lesiano    0
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


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
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


Link para a mensagem
Partilhar noutros sites
lesiano    0
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


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
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


Link para a mensagem
Partilhar noutros sites
lesiano    0
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


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
Rui Carlos

Só vais chamar a função incrementa quando o primeiro elemento da lista for igual a x.

Caso contrário, devolves directamente o resultado de aplicar a função ao resto da lista.

Partilhar esta mensagem


Link 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