Jump to content
Gundares

IO

Recommended Posts

Gundares

Boas,

desculpem estar a chatear mais uma vez com dúvidas estúpidas mas eu preciso de tirar um número à sorte para o transformar numa string e construir um atributo num xml só que as funções que tiram números à sorte dão todas resultados do tipo (IO () || Int..). Eu já procurei pela internet e descuri que não há forma de transformar diretamente um IO numa String ou num Int diretamente , mas não haverá uma forma de contonar isso?

Cumprimentos Gundares

Share this post


Link to post
Share on other sites
thoga31

Há formas obscuras de contornar isso, mas tens de trabalhar num bloco IO para trabalhar com números pseudo-aleatórios.

funcao = do
   x <- randomRIO (1,9)
   -- etc...


Knowledge is free!

Share this post


Link to post
Share on other sites
pwseo

Há formas obscuras de fazer o que pretendes, mas seguramente não é o que os teus professores pretendem que faças. A solução é construires todo o teu código de forma a que depois possas gerar o número aleatório na main da forma que o thoga31 demonstrou. Depois podes usá-lo com todas as tuas funções.

Share this post


Link to post
Share on other sites
Gundares

Eu já tentei fazer isso, criei uma função auxiliar que a unica coisa que fazia era receber dar o resultado como int só que como tinha de por o putStrLn aquilo acabava por se transformar outra vez num IoO e se não pusesse o putStrLn o ghci queixavasse de não poder acabar com um int

Edited by Gundares

Share this post


Link to post
Share on other sites
pwseo

Penso que estás a confundir algumas coisas e a desconhecer outras... podes mostrar o que já fizeste?

Share this post


Link to post
Share on other sites
Gundares

Um colega disse que para transformar um Int a partir do resultado devia criar uma função que o resultado fosse in para aplicar no fim do do block entao eu fiz o seguinte fui ver ao enunciado que tinha lá um exemplo :

import Text.XML.Light
import System.Random
main = do entrada <­- getContents
	  let Just elem = parseXMLDoc entrada
	  seed <­- randomIO
	  putStrLn $ showElement (processa seed elem)
processa :: Int -­> Element ­-> Element

Isto é para a main que corre as funções todas dando o resultado final do ficheiro

Então eu tentei fazer uma coisa do tipo só para ver se isto resolvia o problema de não ser int

qualX = do x <- randomRio (-18,18)
			  putStrLn  $  show (oX x)

oX :: Int -> Int
oX n = n

rapidamente me apercebi que isto era tanto inútil como absurdo , pois eu ao aplicar o putStrLn $ show (oX x) estou a transformar aquilo de novo num IO ()

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
pdfrod

Cria uma função que receba o número aleatório como argumento, e depois faça o processamento XML que tem a fazer. Depois no "main" só tens que invocar essa função passando o número aleatório. Exemplo:

processXML :: Int -> ...
processXML v = doXMLStuff (show v)


main :: IO ()
main = do
 v <- randomRIO (-18, 18)
 let result = processXML v
 ...
 return () -- Esta linha normalmente não é necessária num programa completo, mas dá jeito quando ainda se está a desenvolver

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

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