Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import System.Random
- import Control.Monad(when)
- import Control.Monad.State.Lazy
- consonants :: [Char]
- consonants = "bcdfghjklmnpqrstvwxyz"
- vowels :: [Char]
- vowels = "aeiou"
- randomInt :: (Int, Int) -> State StdGen Int
- randomInt bounds = do
- gen <- get
- let (result, newGen) = randomR bounds gen
- put newGen
- return result
- random2 :: Int -> State StdGen Int
- random2 n = randomInt (0, n - 1)
- randomChoose :: [a] -> State StdGen a
- randomChoose l = do
- index <- random2 $ length l
- return $ l !! index
- randomConsonant :: State StdGen Char
- randomConsonant = randomChoose consonants
- randomVowel :: State StdGen Char
- randomVowel = randomChoose vowels
- randomReplicate :: (Int, Int) -> a -> State StdGen [a]
- randomReplicate bounds x = do
- n <- randomInt bounds
- return $ replicate n x
- main = do
- seed <- randomIO
- let str = fst $ runState genSyllable $ mkStdGen seed
- putStrLn $ "Syllable is " ++ str
- genSyllable :: State StdGen String
- genSyllable = do
- beg <- randomReplicate (0, 3) randomConsonant
- mid <- randomReplicate (1, 2) randomVowel
- end <- randomReplicate (0, 3) randomConsonant
- let all = concat [beg, mid, end]
- sequence all
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement