Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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
Haskell Foldr只适用于一个参数_Haskell_Fold - Fatal编程技术网

Haskell Foldr只适用于一个参数

Haskell Foldr只适用于一个参数,haskell,fold,Haskell,Fold,所以我得到了一个函数,如果n是按位或对xs的任何子序列应用的结果,它将返回True: 校验位xs n=not$null$filter==n$map foldr.|。零位子序列xs 现在我不明白的是foldr已经给了。零位,但我不需要foldr的另一个参数吗。 就像我理解foldr的函数一样,你把它应用到一个函数,在这种情况下,|,应用到一个起始值,我猜它是零位,但是t a呢,它在: 前奏曲>:t foldr 可折叠的t=>a->b->b->b->t a->b 我有什么遗漏吗?顺便说一句,上面的代

所以我得到了一个函数,如果n是按位或对xs的任何子序列应用的结果,它将返回True:

校验位xs n=not$null$filter==n$map foldr.|。零位子序列xs

现在我不明白的是foldr已经给了。零位,但我不需要foldr的另一个参数吗。 就像我理解foldr的函数一样,你把它应用到一个函数,在这种情况下,|,应用到一个起始值,我猜它是零位,但是t a呢,它在:

前奏曲>:t foldr 可折叠的t=>a->b->b->b->t a->b

我有什么遗漏吗?顺便说一句,上面的代码的工作原理与它应该的一样。

带有缺失参数的foldr返回一个函数,该函数只接受一个缺失的参数

然后可以继续将该函数映射到子序列xs上,这意味着这些子序列中的每一个子序列都将作为缺少的参数传递给专门的foldr函数

这是一种非常常见和有用的模式,允许您通过将参数子集固定到更通用的函数来创建专用函数

在您的示例中,专用函数保持匿名。如果这变得太难阅读或者函数在很多地方都很有用,您可以给它起个名字

--  create a new function that takes the first ten list elements 
top10 = take 10       -- call take with a "missing parameter"

-- as opposed to
ten = take 10 myList  -- call take with all parameters to get a list

如果将Haskell函数视为只接受一个参数并返回一个接受下一个参数的函数,而下一个参数又返回一个接受第三个参数的函数,或者如果这是最后一个参数,则返回一个简单的结果,这可能会有所帮助或混淆。像take 1 list这样的表达式可以被读取为take 1 list:调用take 1获得一个函数,然后在列表上调用该函数以获得最终结果。

Haskell不要求您同时提供所有参数。如果只提供前两个,则部分应用了该函数,结果是另一个函数需要最后两个。这是Haskell的一个普遍功能,不仅限于foldr。试着询问GHCI foldr的类型。零位:因为它显然是一个有效的表达式,所以它必须有某种类型,对吗?你认为那是什么意思?它是怎么变成那种类型的?哦,我不知道。听起来很酷!谢谢,我知道了!尝试谷歌搜索部分应用程序和咖喱。在Haskell中,我们假设有多个参数函数,但实际上每个函数只接受一个参数-但它可以返回另一个接受另一个参数的函数,从而产生两个参数被传递给原始函数的错觉。@chi稍后会这样做。好的解释,顺便说一句