【发布时间】:2015-01-24 08:24:54
【问题描述】:
我有以下非常简单的程序,它接受一个整数列表和一个整数。然后它使用 map 检查整个列表以查看列表中有多少成员与传递的整数相同。然后它通过查找映射生成的列表的长度来返回这些元素的数量。但是,我无法在我的第一个函数(Integer-Bool)中传递我的第一个整数参数。为什么会这样,我该如何解决?谢谢
import Data.List (genericLength)
count::(Integer->Bool)->[Integer]->Integer
count op xs = genericLength (filter(True ==) (map op xs))
main = do
print $ count 3 [3, 4, 5, 3, 5, 3]
这段代码应该如下运行:
-首先,它将map应用于列表并返回一个新列表:[True, False, False, True, False, True]
-其次,它应用过滤器过滤掉所有True,我们得到一个新列表:[True, True, True]
-第三,它应用 genericLength 来计算最后一个列表的长度,因此返回:3
【问题讨论】:
-
3是如何对数字进行运算的? -
不是。但我应该有什么。也许(==3)?
-
filter(True ==) (map op xs)是一种非常奇怪的拼写filter op xs的方式。 -
@DanielWagner 我知道是这样,但问题的要求是它同时使用地图和过滤器。我知道我们可以从列表中过滤掉指定的整数,然后计算这些过滤元素的出现次数。但这甚至不需要函数参数,这就是那个愚蠢问题的目的。
标签: haskell