Ric*_*Han 2 monads haskell list-comprehension
我有一个列表理解,看起来像这样:
cross ps = [ p* pp * ppp | p <- ps, pp <- ps, ppp <- ps, p >= pp , pp >= ppp ]
Run Code Online (Sandbox Code Playgroud)
如何使用monads实现这一点,而无需输入列表名称?
dim ps n = do
p <- ps
pp <- ps
ppp <- ps
p...p <- ps
guard (p >= pp && pp >= ppp ... && p...p >=p....p)
return (p*pp*ppp*p...p)
Run Code Online (Sandbox Code Playgroud)
如何在不显式赋值的情况下使用列表monad?
这是我怎么做的
ascending :: Ord a => [a] -> Bool
ascending list = and $ zipWith (>=) (tail list) list
dim ps n = map product $ filter ascending allComb
where allComb = replicateM n ps
Run Code Online (Sandbox Code Playgroud)
将replicateM来自Control.Monad与该列表单子它产生的所有组合n给定列表中的元素.然后我只筛选出升序排列的组合,最后计算剩余列表的产品.
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |