English 中文(简体)
Haskell Monadic Operations on Lists
原标题:Haskell Monadic Operations on Lists

I have the following

[3,2,1] >> [1]
= [1,1,1]

我不明白为什么发生这种情况? 看看并看得看;我预计[3,2,1]是结果,但我在名单上看到这一点有所不同。

Can anyone explain why?

问题回答

For any monad, you can translate a >> b as a >>= \_ -> b. In the list monad, the bind operator (>>=) is concatMap with its arguments flipped, so your example is equivalent to

concatMap (\_ -> [1]) [3, 2, 1]

你可以评估这一点。

concatMap (\_ -> [1]) [3, 2, 1]
= concat (map (\_ -> [1]) [3, 2, 1])   -- definition of concatMap
= concat [[1], [1], [1]]               -- apply map
= [1, 1, 1]                            -- apply concat

<代码>>>可作如下界定:

ma >> mb = ma >>= const mb

(That s not its actual definition in the Monad instance for [], but that doesn t matter.)

在清单中,对于<代码>[1,2,3]中的每一要素,请上 ***,总结果相当于concat [***, [...], ***],即[1,1,1]

The instance for [ ] in GHC. 基地:

m >>= k             = foldr ((++) . k) [] m
m >> k              = foldr ((++) . ( _ -> k)) [] m

在这里,我们用一fold,一只右侧复制件,供左侧的每个部分使用,而忽略任何可能的内容。

名单return -> [x]。 或许,如果我改写了<代码>return上的榜样,那将更清楚。

[1,2,3] >> return 1

让我补充一些 do糖

do [1,2,3]
   return 1

你们现在能够看到吗? <代码>>>并不将数值从左侧中提取,而仅围绕这些数值的<>context。 在这种情况下,情况是3个要素清单,或者说,3个不同的选择都是非决定性的。 然后,每例<代码>return 1。

如果是,

do x <- [1,2,3]
   return x

然后是not在每一情况下选择1,但x,这代表了每个“部门”的具体选择。 猜测结果,然后检查格西,看看你是否正确。 然后将其su倒,并采用等式推理获得正确的答案。





相关问题
Finding a class within list

I have a class (Node) which has a property of SubNodes which is a List of the Node class I have a list of Nodes (of which each Node may or may not have a list of SubNodes within itself) I need to be ...

How to flatten a List of different types in Scala?

I have 4 elements:List[List[Object]] (Objects are different in each element) that I want to zip so that I can have a List[List[obj1],List[obj2],List[obj3],List[obj4]] I tried to zip them and I ...

How to remove unique, then duplicate dictionaries in a list?

Given the following list that contains some duplicate and some unique dictionaries, what is the best method to remove unique dictionaries first, then reduce the duplicate dictionaries to single ...

Is List<> better than DataSet for UI Layer in ASP.Net?

I want to get data from my data access layer into my business layer, then prepare it for use in my UI. So i wonder: is it better to read my data by DataReader and use it to fill a List<BLClasses&...

What is the benefit to using List<T> over IEnumerable<T>?

or the other way around? I use generic lists all the time. But I hear occasionally about IEnumerables, too, and I honestly have no clue (today) what they are for and why I should use them. So, at ...

灵活性:在滚动之前显示错误的清单

我有一份清单,在你滚动之前没有显示任何物品,然后这些物品就显示。 是否有任何人知道如何解决这一问题? 我尝试了叫人名单。

Converting Dictionary to List? [duplicate]

I m trying to convert a Python dictionary into a Python list, in order to perform some calculations. #My dictionary dict = {} dict[ Capital ]="London" dict[ Food ]="Fish&Chips" dict[ 2012 ]="...

热门标签