我正在研究Project Euler的第9个问题,我对在另一个monad中提取一个可能值的最佳方法有疑问.问题要求找到满足的'a','b','c':
我编写了以下代码来解决问题:
problem9 :: (Integral a) => a -> [(a, a, a)]
problem9 n =
do
a <- [1..n]
b <- [1..a]
c <- fromJustM (findC a b)
guard (a + b + c == n)
return (a, b, c)
Run Code Online (Sandbox Code Playgroud)
'c'可以通过分析计算,但是,由于它可能不存在,我返回一个可能的值.
findC :: (Integral a) => a -> a -> Maybe a
findC a b = ... (implementation) ...
Run Code Online (Sandbox Code Playgroud)
要提取列表monad中的可能值,我创建了以下函数:
fromJustM …Run Code Online (Sandbox Code Playgroud)