Jump to content
lesiano

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

Recommended Posts

lesiano

Boas;

O título diz tudo.

Dá para ter uma função q evoque duas?

Por exemplo:

func1 a b c :: func2 a b func3 c b;

Share this post


Link to post
Share on other sites
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.  :) )

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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))

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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  :)

Share this post


Link to post
Share on other 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)))

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


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