使用列表推导计算列表中的负数

gra*_*mcc 1 functional-programming

完成Bird&Wadler的第一版"功能编程简介",它使用了Haskell-ish语法的理论惰性语言.

练习3.2.3问:

使用列表推导,定义用于计算列表中负数的数量的函数

现在,在这一点上,我们仍然在摸索列表的表面.我认为目的是只使用那时已经引入的概念,并且还没有引入以下内容:

  • 用于计算列表长度的函数
  • 列出索引
  • 模式匹配即f(x:xs)= ......
  • 无限的名单
  • 作用于列表的所有函数和运算符 - 除了一个例外 - 例如++,head,tail,map,filter,zip,foldr等

有哪些工具?

  • 返回数值列表的最大元素的最大函数
  • 列表推导,可能有多个生成器表达式和谓词
  • 理解输出不需要依赖于生成器表达式的概念,暗示生成器表达式可用于控制生成列表的大小
  • 有限算术序列表,即[a..b]或[a,a + step..b]

我承认,我很难过.显然,人们可以通过理解很容易地从原始列表中提取负数,但是如何计算它们,没有长度或索引的概念?

最大函数的可用性将表明最终游戏是构造一个列表,其最大元素是负数的数量,该函数的最终结果是对所述列表的最大应用.

我要么错过一些令人眼花缭乱的明显的东西,要么是一个聪明的把戏,可怕的感觉可能是前者.告诉我,你怎么解决这个问题?

小智 7

我的第一版的旧版本和非常泛黄的版本附有练习3.2.3:"这个问题需要#(长度),这只会在以后出现".故事的寓意是在设置练习时要更加小心.我目前正在完成第三版,其中包含每个问题的答案.

顺便说一句,你是否回答了练习1.2.1,它要求你写下正方形(方形(3 + 7))可以简化为正常形式的所有方法.事实证明,有547种方式!