我有一个使用monad-list构建函数的问题
> multab 4
["1*1=1","1*2=2","1*3=3","1*4=4","2*2=4","2*3=6","2*4=8","3*3=9","3*4=12","4*4=16"]
Run Code Online (Sandbox Code Playgroud)
所以我想开始:
multab :: Integer -> [String]
Run Code Online (Sandbox Code Playgroud)
对于其他人,你想提出任何建议吗?
提前致谢.
基本上你想生成一个条目列表然后打印它们.
让我们从条目开始.这些由两个整数及其产品组成.因此,让我们定义一个类型同义词来保存两个整数
type Entry = (Integer, Integer)
Run Code Online (Sandbox Code Playgroud)
以及计算这些整数乘积的评估函数,
eval :: Entry -> Integer
eval = uncurry (*)
Run Code Online (Sandbox Code Playgroud)
然后,我们定义一个生成条目的函数:
gen :: Integer -> [Entry]
gen n = [(i, j) | i <- [1 .. n], j <- [i .. n]]
Run Code Online (Sandbox Code Playgroud)
例如:
> gen 4
[(1,1),(1,2),(1,3),(1,4),(2,2),(2,3),(2,4),(3,3),(3,4),(4,4)]
Run Code Online (Sandbox Code Playgroud)
接下来,我们需要能够打印条目:
showEntry :: Entry -> String
showEntry e@(i, j) = show i ++ "*" ++ show j ++ "=" ++ show (eval e)
Run Code Online (Sandbox Code Playgroud)
例如:
> showEntry (2, 3)
"2*3=6"
Run Code Online (Sandbox Code Playgroud)
最后,让我们将这些部分粘合在一起:
multab :: Integer -> [String]
multab = map showEntry . gen
Run Code Online (Sandbox Code Playgroud)
开始了:
> multab 4
["1*1=1","1*2=2","1*3=3","1*4=4","2*2=4","2*3=6","2*4=8","3*3=9","3*4=12","4*4=16"]
Run Code Online (Sandbox Code Playgroud)