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

crislanio_macedo

Versão segura da função composta log da sqrt(x) usando a notação >>=

Mensagens Recomendadas

crislanio_macedo

Olá a todos, como faria uma função segura usando a notação >>=

safeLogSqrt2 :: (Floating a, Ord a) => a -> Maybe a

safeLog :: (Floating a, Ord a) => a ->Maybe a
safeLog x
| x >0 = Just (log x)
| otherwise = Nothing

safeSqrt :: (Floating a, Ord a) => a -> Maybe a
safeSqrt x
| x >0 = Just (sqrt x)
| otherwise = Nothing

-- composta log da raiz
safeLogSqrt :: (Floating a, Ord a) => a -> Maybe a
safeLogSqrt x = do {
y <- (safeSqrt x);
z <- (safeLog y);
return z;
}

Eu fiz aqui usando a notação do, mas não faço a mínima ideia de como usar o operador monádico >>=, espero a contribuição de voçês, Grato

Seria algo assim?

--safeLogSqrt2 :: (Floating a, Ord a) => a -> Maybe a
safeLogSqrt2 return x >>= (safeSqrt x) >>= (safeLog x)

Não sei como usar a sintaxe.

monad.hs:34:1: Parse error: naked expression at top level
Failed, modules loaded: none.
Prelude> :l monad.hs
[1 of 1] Compiling Main ( monad.hs, interpreted )

monad.hs:34:1: Parse error: naked expression at top level
Failed, modules loaded: none.

Partilhar esta mensagem


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

Deve ser algo deste género:

safeLogSqrt x = (safeSqrt x) >>= safeLog >>= return

EDIT1:

Uma outra alternativa seria:

safeLogSqrt x = (Just x) >>= safeSqrt >>= safeLog >>= return

EDIT2:

Na verdade aquele último return nem lá devia estar. Em vez disso, o return pode ser usado para passar o x para o tipo Maybe.

safeLogSqrt x = (return x) >>= safeSqrt >>= safeLog

Editado por Rui Carlos

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.