【发布时间】:2014-02-05 15:20:09
【问题描述】:
阅读 Bird & Wadler 撰写的“函数式编程简介”第一版,它使用了一种理论上的惰性语言和类似 Haskell 的语法。
习题 3.2.3 问:
使用列表推导,定义一个计算数字的函数 列表中的负数
现在,在这一点上,我们仍处于列表的表面。我假设的意图是只应使用当时已经引入的概念,而以下内容尚未被引入:
- 计算列表长度的函数
- 列表索引
- 模式匹配,即 f (x:xs) = ...
- 无限列表
- 作用于列表的所有函数和运算符 - 除了一个例外 - 例如++、head、tail、map、filter、zip、foldr等
有哪些工具可用?
- 返回数值列表最大元素的最大值函数
- 列表推导式,可能有多个生成器表达式和谓词
- 理解的输出不需要依赖于生成器表达式的概念,这意味着生成器表达式可用于控制生成列表的大小
- 有限算术序列列表,即 [a..b] 或 [a, a + step..b]
我承认,我被难住了。显然,通过理解可以很容易地从原始列表中提取负数,但是如果没有长度或索引的概念,那么如何计算它们呢?
maximum 函数的可用性表明最终游戏是构造一个列表,其最大元素是负数的个数,该函数的最终结果是将最大值应用于该列表。
我要么错过了一些显而易见的东西,要么错过了一个聪明的把戏,我有一种可怕的感觉,它可能是前者。告诉我,你是怎么解决这个问题的?
【问题讨论】: