'da rastgele bir sayıyı tekrarlayın. Bazı harflerin rasgele tekrarlandığı bir ifadeyi döndürecek bir aptal IRC botu için bir işlev oluşturmaya çalışıyorum. Sorun şu ki, ghc
gibi rasgele sayıları kullanmanın bir yolunu bulamıyorum. this answer kullanarak bile kodumun derlenmesini sağlamak için özellikle yararlı görünmüyor. Hatta Int
bekliyor ne zaman bir IO Int
bulduğu, hala derleme hataları alıyorum bu şekilde bir do
bloğunu kullanan ve işlevine IO Int
s geçme hile ileHaskell
import System.Random
-- Write bad
baaad x y = "B" ++ (repeatA x) ++ "D " ++ (exclaim y)
-- StartHere
randomBad :: String
randomBad = do
x <- randomRIO(5,10) :: IO Int
y <- randomRIO(0,6) :: IO Int
return $ baaad x y
repeatA :: Int -> String
repeatA x = rptChr "A" x
exclaim :: Int -> String
exclaim x = rptChr "!" x
rptChr :: String -> Int -> String
rptChr x y = take y (cycle x)
.
'randomBad' I/O eylemlerini kullandığı için, onun türü' String' değil 'IO String' olmalıdır. Ayrıca, gerekli ithalatları ekleyerek kodunuzu kendi kendine yeterli hale getirin. – Jubobs
@Jubobs Şimdi eklenmiştir. System.Random'un bu örnek için tek ihtiyacım olduğuna inanıyorum (tüm botun kendisi muhtemelen bu soruyla ilgisiz olan bir sürü başka ithalat kullanıyor). – cjm