Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_Monads - Fatal编程技术网

List 在一元上下文中生成列表

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)

据我所知,您可以使用'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)
下面是一个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]