import System.Random import qualified Data.List as L import qualified Data.Map as Map fact 0 = 1 fact n = fact(n-1) * n --母音表 vowels kinds vows void = do --母音の種類と母音表と空のリスト vowslength <- randIO 1 2 --二重母音までにしました。疲れたので三重母音とか言わないで、てか日本語話者は使えないよ then return void then vowels kinds vows ((vows!!(select-1)):void) then vowels kinds vows (((vows!!(select-1))++(vows!!(select2-1))):void) else vowels kinds vows void --子音表 consonants kinds con void = do then return void then consonants kinds con ((con!!(select-1)):void) else consonants kinds con void --音節構造自動生成器(ランダム) sylgen maxsyllable void = do let symbol = ["C", "V"] select <- randIO 0 1 then do else case select of sylsets kinds maxsyllable void = do sylgen <- sylgen maxsyllable [] else sylsets kinds (maxsyllable+1) void --単語の雛形 prewordgen syllableculster syllable void = do else prewordgen syllableculster syllable (syllable!!(select-1):void) prewordsets kinds syllablerange syllable void = do syllableculster <- randIO 1 syllablerange prewordgen <- prewordgen syllableculster syllable [] else prewordsets kinds syllablerange syllable (prewordgen ++ void) --単語生成 wordgen preword vowel consonant void = do let con = (consonant!!selectcon) let vow = (vowel!!selectvow) 'V' -> wordgen preword vowel consonant (vow:void) 'C' -> wordgen preword vowel consonant (con:void) 'V' -> wordgen preword vowel consonant (void ++ (vow:[])) 'C' -> if (last void) == con then wordgen preword vowel consonant void else wordgen preword vowel consonant (void ++ (con:[])) wordsets prewords vowel consonant void = else do wordgen <- wordgen preword vowel consonant [] wordsets prewords vowel consonant (void ++ wordgen) --文の生成 sentgen wordlist void --ユーフォニー指数 euphony alpha beta gamma delta epsilon | epsilon == 2 = -0.04*(e0**2) + 1.4*e0 where e0 = euphony0 alpha beta gamma delta epsilon wordsize wordlist void mode [] = [] mode ns = beta0 wordlist consonants void beta wordlist consonants = (fromIntegral $ beta0 wordlist consonants []) / (fromIntegral $ length wordlist) gamma0 wordlist consonants void1 void2 void3 then else gamma0 wordlist consonants void1 (void2+1) void3 gamma wordlist consonants = (((fromIntegral (gamma0 wordlist consonants [] 0 0)) / (fromIntegral $ length wordlist)) * (beta wordlist consonants)) delta0 wordlist void delta1 word void delta syllablelist = (fromIntegral (delta1 (delta0 syllablelist []) 0)) / (fromIntegral (length (delta0 syllablelist []))) epsilon0 word void1 void2 epsilon word = epsilon0 (delta0 word []) 0 [] main = do putStrLn "母音一覧" let vowel = ["a", "i", "u", "e", "o"] vowels <- vowels vows vowel [] print $ vowels putStrLn "子音一覧" let consonant = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z"] consonants <- consonants cons consonant [] print $ consonants putStrLn "音節構造一覧" kind <- randIO 1 50 print $ sylsets putStrLn "単語の雛形(語の音節構造)" prewordgen <- prewordgen 3 sylsets [] print $ prewordgen putStrLn "単語の雛形(語の音節構造)一覧" syllablerange <- randIO 1 6 prewordsets <- prewordsets 30 syllablerange sylsets [] print $ prewordsets putStrLn "単語" wordgen <- wordgen prewordgen vowels consonants [] print $ wordgen putStrLn "単語一覧" wordsets <- wordsets prewordsets vowels consonants [] print $ wordsets putStrLn "文の生成" let sentence = sentgen wordsets [] print $ sentence putStrLn "ユーフォニー指数(Euphony Index;)" putStr "alpha:" let alph = alpha wordsets print $ alph putStr "beta:" let bet = 100 * (beta wordsets consonants) print $ bet putStr "gamma:" let gam = 100 * (gamma wordsets consonants) print $ gam putStr "delta:" let del = 100 * (delta prewordsets) print $ del putStr "epsilon:" let ep = epsilon prewordsets print $ ep putStr "E = " let euphonyindex = euphony alph bet gam del ep print $ euphonyindex
Standard input is empty
母音一覧 ["ae","iu","ao","a","e"] 子音一覧 ["v","n","d","k","t","l","b","f","j","s","g","y","z","r","x","p","c","w","q"] 音節構造一覧 ["VCCV","VC","CCV","V"] 単語の雛形(語の音節構造) ["VCVVCCV"] 単語の雛形(語の音節構造)一覧 ["VCCVV","VCCVCCV","VCCV","VC","CCVCCV","VC","VCCV","V","VV","VCV","VCCVVCCV","VCCV","VCCVCCV","VCCV","VCCVVCCV","V","VCV","VC","CCVVC","VC","VVCCV","VCCV","CCV","V","VC","CCV","VCCV","VCVCCV","VCVC","VC"] 単語 ["aesaeaozbiu"] 単語一覧 ["aewfaoa","agnaebriu","aoywiu","ed","qkertae","es","avtao","e","iuiu","apao","iulciuaekviu","abwa","azkeyjae","aevrae","iusbaeanpiu","a","abae","ac","zpiueg","iuw","eekdae","iupce","lse","e","aeb","kniu","etxa","eqaorxao","iupev","ay"] 文の生成 "ay iupev eqaorxao etxa kniu aeb e lse iupce eekdae iuw zpiueg ac abae a iusbaeanpiu aevrae azkeyjae abwa iulciuaekviu apao iuiu e avtao es qkertae ed aoywiu agnaebriu aewfaoa" ユーフォニー指数(Euphony Index;) alpha:4.833333333333333 beta:13.333333333333334 gamma:10.222222222222223 delta:49.122807017543856 epsilon:0 E = 98.68863197185318