版本一:这个是最初的版本,刚刚学习haskell,存在以下几个问题。
- 只能在ghci交互环境中运行,然后复制粘贴到文件当中。
- 随机数的生成有点生硬,因为是从网络上抓下来的代码。
Haskell语言:
Codee#26815
01
-- file: make_math.hs
02 -- 出n道两个参数的加减法
03 -- 使用方法: gs n x y
04 -- n 表示需要多少道题
05 -- x 表示最小值
06 -- y 表示最大值
07 -- 比如 gs 10 100 999 表示出10道 加减法
08
09 import System.Random
10 import System.IO.Unsafe
11
12 drawInt :: Int -> Int -> IO Int
13 drawInt x y = getStdRandom ( randomR ( x , y))
14
15 random_list :: ( Eq a , Num a) => a -> Int -> Int -> IO [ Int ]
16 random_list 0 _ _ = return []
17 random_list n x y = do
18 a <- drawInt x y
19 rest <- ( random_list (n - 1) x y)
20 return ( a : rest)
21
22
23
24
25 math_practice n x y = zip [ 1 .. ] $ map trans_formula ( mix_list ( init_val (n * 2) x y) ( init_sym n ))
26 where mix_list [] _ = []
27 mix_list ( x : y : xs) ( z : zs) = ( x , y , z) : mix_list xs zs
28 init_val n x y = unsafePerformIO $ random_list n x y
29 init_sym n = unsafePerformIO $ random_list n 0 1
30
31 trans_formula ( x , y , z) =
32 if z == 0
33 then (( add_str x y) , ( add_str' x y))
34 else (( plus_str x y ), ( plus_str' x y))
35 add_str x y = show x ++ " + " ++ show y ++ "= "
36 add_str' x y = show x ++ " + " ++ show y ++ "=" ++ show ( x + y)
37
38 plus_str x y = show ( max x y) ++ " - " ++ show ( min x y) ++ "= "
39 plus_str' x y = show ( max x y) ++ " - " ++ show ( min x y) ++ "=" ++ ( show ( abs ( x - y)))
40
41 gs n x y = do
42 mapM_ putStrLn [ show a ++ ". " ++ b| ( a ,(b , c)) <- temp_list ]
43 putStrLn " "
44 mapM_ putStrLn [ show a ++ ". " ++ c| ( a ,(b , c)) <- temp_list ]
45 where temp_list = math_practice n x y
02 -- 出n道两个参数的加减法
03 -- 使用方法: gs n x y
04 -- n 表示需要多少道题
05 -- x 表示最小值
06 -- y 表示最大值
07 -- 比如 gs 10 100 999 表示出10道 加减法
08
09 import System.Random
10 import System.IO.Unsafe
11
12 drawInt :: Int -> Int -> IO Int
13 drawInt x y = getStdRandom ( randomR ( x , y))
14
15 random_list :: ( Eq a , Num a) => a -> Int -> Int -> IO [ Int ]
16 random_list 0 _ _ = return []
17 random_list n x y = do
18 a <- drawInt x y
19 rest <- ( random_list (n - 1) x y)
20 return ( a : rest)
21
22
23
24
25 math_practice n x y = zip [ 1 .. ] $ map trans_formula ( mix_list ( init_val (n * 2) x y) ( init_sym n ))
26 where mix_list [] _ = []
27 mix_list ( x : y : xs) ( z : zs) = ( x , y , z) : mix_list xs zs
28 init_val n x y = unsafePerformIO $ random_list n x y
29 init_sym n = unsafePerformIO $ random_list n 0 1
30
31 trans_formula ( x , y , z) =
32 if z == 0
33 then (( add_str x y) , ( add_str' x y))
34 else (( plus_str x y ), ( plus_str' x y))
35 add_str x y = show x ++ " + " ++ show y ++ "= "
36 add_str' x y = show x ++ " + " ++ show y ++ "=" ++ show ( x + y)
37
38 plus_str x y = show ( max x y) ++ " - " ++ show ( min x y) ++ "= "
39 plus_str' x y = show ( max x y) ++ " - " ++ show ( min x y) ++ "=" ++ ( show ( abs ( x - y)))
40
41 gs n x y = do
42 mapM_ putStrLn [ show a ++ ". " ++ b| ( a ,(b , c)) <- temp_list ]
43 putStrLn " "
44 mapM_ putStrLn [ show a ++ ". " ++ c| ( a ,(b , c)) <- temp_list ]
45 where temp_list = math_practice n x y