【问题标题】:Why am I unsuccessful in passing an argument to a function in Haskell为什么我无法将参数传递给 Haskell 中的函数
【发布时间】: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


【解决方案1】:

我想通了。它需要这样调用:

print $ count (==3) [3, 4, 5, 3, 5, 3]

【讨论】:

    猜你喜欢
    • 2017-01-25
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 2020-08-28
    • 2013-01-27
    相关资源
    最近更新 更多