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 Haskell单子实现_List_Haskell_Syntax_Lambda_Monads - Fatal编程技术网

List Haskell单子实现

List Haskell单子实现,list,haskell,syntax,lambda,monads,List,Haskell,Syntax,Lambda,Monads,我最近在读《了解你》一书时,遇到了这样一个表达: [1,2] >>= \n -> ['a', 'b'] >>= \ch -> return (n, ch) 此表达式返回结果 [(1,'a'),(1,'b'),(2,'a'),(2,'b')] 所以我知道列表的一元绑定实现如下 xs >>= f = concatMap f xs 取表达式的前半部分,即: [1,2] >>= \n -> ['a', 'b'] 它的计算结果为['

我最近在读《了解你》一书时,遇到了这样一个表达:

[1,2] >>= \n -> ['a', 'b'] >>= \ch -> return (n, ch)
此表达式返回结果

[(1,'a'),(1,'b'),(2,'a'),(2,'b')]
所以我知道列表的一元绑定实现如下

xs >>= f = concatMap f xs
取表达式的前半部分,即:

[1,2] >>= \n -> ['a', 'b']
它的计算结果为['a','b','a','b'],据我所知,它随后被输入函数:\ch->return n,ch


我不明白的是,列表中的值1,2是如何分配给n的,然后编译器如何保存它的记录,然后在最后一个函数中将其分配给n的?

前半部分不是您所想的,括号如下:

[1,2] >>= ( \n -> ['a', 'b'] >>= ( \ch -> return (n, ch) ) )

前半部分不是你所想的,括号是这样的:

[1,2] >>= ( \n -> ['a', 'b'] >>= ( \ch -> return (n, ch) ) )

在学习材料中省略明确的括号是有害的。太苛刻了?问无数的新手,他们为此浪费了无数的时间。在学习材料中省略明确的括号是有害的。太苛刻了?问无数的新手,他们为此浪费了无数的时间。你可能想说这是因为lambda表达式总是尽可能地向右移动。你可能想说这是因为lambda表达式总是尽可能地向右移动。