【发布时间】:2021-07-02 13:48:30
【问题描述】:
我有一个任务:
使用 fold 计算范围内的数字。使用 int list * int * int -> int 类型完成下面的函数 numberInRange,它接受三个参数(int list, int, int)并返回一个 int,其计数在 lo 和 hi 之间。
fun fold (f, acc, xs) = case xs of [] => acc | x::xs' => fold (f, f (acc, x), xs') fun numberInRange (xs, lo, hi) = (* ... *) val myList = [1, 2, 3, 4, 5, 6, 7, 8, 9] val x = numberInRange (xs, 2, 7)
谁能告诉我怎么做,我正在为我的作业这个问题而苦苦挣扎
【问题讨论】:
-
对我来说,这个函数的目的不是很明显......“一个在 lo 和 hi 之间计数的 int”是什么意思?
lo和hi不只是hi - lo之间的计数如何?如果你能提供一个或多个例子,或者更清楚的解释,你会更容易解决这个任务。 -
基本上,我有一个正确的数字列表,比如说 [1, 2, 3, 4, 5]。我需要一个将列表用作一个参数和一个范围的函数。假设范围的下限是 2,hi 是 5。我需要它告诉我 2 到 5 之间,有 4 个数字
-
我相信 hi 和 lo 不是索引,而是数字本身
-
哦!所以它计算
xs中有多少数字在lo和hi的封闭区间内!哇,不知道为什么我很难理解。 -
我认为知道这种类型的折叠是对非常常见的“用列表的头部做某事 (
x) 和在其尾部递归的结果 (@987654329) 的抽象可能会有所帮助@)" 模式。