Foldr 仅应用于一个参数
Foldr applied to just one argument
所以如果数字 n 是按位应用或应用到 xs 的任何子序列的结果,我得到的函数将 return True
:
checkBits xs n = not $ null $ filter (==n) $ map (foldr (.|.) zeroBits) (subsequences xs)
现在我没有得到的是 foldr
给出了 (.|.)
和 zeroBits
,但我不需要另一个参数 foldr
。
就像我理解 foldr
的功能一样,你将它应用到一个函数,在那种情况下是 (.|.)
,应用到 "starting value",我猜是 zeroBits
,但是什么关于 t a
,其中提到:
Prelude>:t foldr
foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
有什么我遗漏的吗?顺便说一句,上面的代码可以正常工作。
foldr
带有 "missing" 参数 returns 一个接受单个参数(缺少的参数)的函数。
然后您可以继续 map
在您的 subsequences xs
上执行该函数(这意味着这些子序列中的每一个都作为 "missing" 参数传递给您的专用 foldr 函数)。
这是一个非常常见且有用的模式,允许您通过将参数子集固定为更通用的函数来创建专用函数。
在您的示例中,"specialized function" 保持匿名。如果这变得太难读了(或者这个函数在很多地方都很有用),你可以给它起一个名字。
-- 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 函数视为仅采用单个参数并返回采用下一个参数的函数(反过来 returns 采用第三个参数或一个简单的结果,如果那是最后一个)。像 take 1 list
这样的表达式可以读作 (take 1) list
:调用 take 1
获得一个函数,然后在 list
上调用该函数以获得最终结果。
所以如果数字 n 是按位应用或应用到 xs 的任何子序列的结果,我得到的函数将 return True
:
checkBits xs n = not $ null $ filter (==n) $ map (foldr (.|.) zeroBits) (subsequences xs)
现在我没有得到的是 foldr
给出了 (.|.)
和 zeroBits
,但我不需要另一个参数 foldr
。
就像我理解 foldr
的功能一样,你将它应用到一个函数,在那种情况下是 (.|.)
,应用到 "starting value",我猜是 zeroBits
,但是什么关于 t a
,其中提到:
Prelude>:t foldr
foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
有什么我遗漏的吗?顺便说一句,上面的代码可以正常工作。
foldr
带有 "missing" 参数 returns 一个接受单个参数(缺少的参数)的函数。
然后您可以继续 map
在您的 subsequences xs
上执行该函数(这意味着这些子序列中的每一个都作为 "missing" 参数传递给您的专用 foldr 函数)。
这是一个非常常见且有用的模式,允许您通过将参数子集固定为更通用的函数来创建专用函数。
在您的示例中,"specialized function" 保持匿名。如果这变得太难读了(或者这个函数在很多地方都很有用),你可以给它起一个名字。
-- 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 函数视为仅采用单个参数并返回采用下一个参数的函数(反过来 returns 采用第三个参数或一个简单的结果,如果那是最后一个)。像 take 1 list
这样的表达式可以读作 (take 1) list
:调用 take 1
获得一个函数,然后在 list
上调用该函数以获得最终结果。