Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 列表理解的一元方法_List_Haskell_Recursion_Monads - Fatal编程技术网

List 列表理解的一元方法

List 列表理解的一元方法,list,haskell,recursion,monads,List,Haskell,Recursion,Monads,我有以下功能 combinations :: [[a]] -> [[a]] combinations [] = [[]] combinations (xs:xss) = concat [map (x:) yss | x <- xs] where yss = combinations xss 我觉得一定有一种一元的方法可以做到这一点 foobar = do n <- [1,2] ch <- [3,4,5] return[n,ch]

我有以下功能

combinations :: [[a]] -> [[a]]
combinations []       = [[]]
combinations (xs:xss) = concat [map (x:) yss | x <- xs]
  where yss = combinations xss
我觉得一定有一种一元的方法可以做到这一点

foobar = do
    n <- [1,2]
    ch <- [3,4,5]
    return[n,ch]
foobar=do

我能想到的最好的办法是

combinations [] = [[]]
combinations (xs:xss) = do
    x <- xs
    ys <- combinations xss
    return $ x : ys
然后我意识到
map(x:)yss
就是
fmap(x:)yss
,也就是
yss>>=return。(x:)
,所以我知道我能做到

combinations (xs:xss) =
    let yss = combinations xss
    in do
        x <- xs
        ys <- yss
        return $ x : ys
组合(xs:xss)=
设yss=组合xss
在做

我能想到的最好的办法是

combinations [] = [[]]
combinations (xs:xss) = do
    x <- xs
    ys <- combinations xss
    return $ x : ys
然后我意识到
map(x:)yss
就是
fmap(x:)yss
,也就是
yss>>=return。(x:)
,所以我知道我能做到

combinations (xs:xss) =
    let yss = combinations xss
    in do
        x <- xs
        ys <- yss
        return $ x : ys
组合(xs:xss)=
设yss=组合xss
在做
x您的函数用于列表monad

> :t sequence
sequence :: Monad m => [m a] -> m [a]
> sequence [[1,2],[2,3,4],[5,6]]
[[1,2,5],[1,2,6],[1,3,5],[1,3,6],[1,4,5],[1,4,6],[2,2,5],[2,2,6],[2,3,5],[2,3,6],
[2,4,5],[2,4,6]]
您的函数用于列表monad

> :t sequence
sequence :: Monad m => [m a] -> m [a]
> sequence [[1,2],[2,3,4],[5,6]]
[[1,2,5],[1,2,6],[1,3,5],[1,3,6],[1,4,5],[1,4,6],[2,2,5],[2,2,6],[2,3,5],[2,3,6],
[2,4,5],[2,4,6]]

这与这个问题非常相似:这与这个问题非常相似:谢谢,你的答案是显而易见的选择。但是我接受了@bheklillr的回答,因为这更接近我的思考过程。谢谢,你的答案是显而易见的选择。但我接受了@bheklir的回答,因为这更接近我的思考过程。