• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

lesiano

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

13 mensagens neste tópico

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;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Algo tipo isto?

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

Não sei se percebi bem a pergunta...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.  :) )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A função mult aí é o segundo argumento da soma?

Se for, ñ é o q pretendo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

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