List 在一元上下文中生成列表
据我所知,您可以使用'draw from'List 在一元上下文中生成列表,list,haskell,monads,List,Haskell,Monads,据我所知,您可以使用'draw from'(更新 对于您使用MonadRandom进行编辑,我认为您需要的是: 范例 λ> g [1..3] [1,4,5] λ> g [1..3] [1,3,4] λ> g [1..3] [1,4,6] 顺便说一句:当然你可以自己使用do: g :: [Int] -> IO [Int] g [] = return [] g (x:xs) = do r <- f x rs <- g xs return (r:rs)
(更新
对于您使用MonadRandom进行编辑,我认为您需要的是:
范例
λ> g [1..3]
[1,4,5]
λ> g [1..3]
[1,3,4]
λ> g [1..3]
[1,4,6]
顺便说一句:当然你可以自己使用do
:
g :: [Int] -> IO [Int]
g [] = return []
g (x:xs) = do
r <- f x
rs <- g xs
return (r:rs)
下面是一个it实际应用的示例:
λ> combs [1..3] "Hi"
[(1,'H'),(1,'i'),(2,'H'),(2,'i'),(3,'H'),(3,'i')]
正如你所看到的,技巧是从所有xs
中画出一个x
(当然你会做所有的-因此你可以认为这是使用组合数学)和ys
中的y
,然后用它们做一些事情(这里只做一个元组),最后返回它
现在,您当然可以首先以某种方式映射它(这里只需将xs
加倍):
这对你有帮助吗
下面是另一个f
创建列表的地方:
func :: (a -> [b]) -> [a] -> [b]
func f xs = do
x <- xs
b <- f x
return b
这就是你要去的地方吗?你能给你的f
举个例子吗?这很有帮助,我给我的问题添加了更多的细节,因为我认为这会使问题有点复杂。哦,好吧-你毕竟不是在说使用列表单子-我认为你要搜索的东西很简单?
g :: [Int] -> IO [Int]
g [] = return []
g (x:xs) = do
r <- f x
rs <- g xs
return (r:rs)
combs :: [a] -> [b] -> [(a,b)]
combs xs ys = do
x <- xs
y <- ys
return (x,y)
λ> combs [1..3] "Hi"
[(1,'H'),(1,'i'),(2,'H'),(2,'i'),(3,'H'),(3,'i')]
combs :: [a] -> [b] -> [(a,b)]
combs xs ys = do
x <- xs ++ xs
y <- ys
return (x,y)
λ> combs [1..3] "Hi"
[(1,'H'),(1,'i'),(2,'H'),(2,'i'),(3,'H'),(3,'i'),(1,'H'),(1,'i'),(2,'H'),(2,'i'),(3,'H'),(3,'i')]
func :: (a -> [b]) -> [a] -> [b]
func f xs = do
x <- xs
b <- f x
return b
λ> func (\x -> [x,x]) [1..5]
[1,1,2,2,3,3,4,4,5,5]