我正在学习Jason Hickey 的 Objective Caml 简介。
在我学习了第 3 章之后,我似乎明白了let
and是如何fun
工作的。但是,我仍然很难编写自己的fun
.
这是我面临的一个示例问题。
Write a function sum that, given two integer bounds n and m and a function
f, computes a summation (no for loop allowed). i.e., sum n m f = f(n) + f(n+1) + ... + f(m)
那么,我应该如何开始考虑产生这个函数 sum 呢?
在 Java 或普通编程语言中,这很容易。
由于这里不允许使用 for 循环,所以我想我应该这样做let rec
吗?
像这样的东西:
let rec sum n m f = fun i -> ....
我需要i
一个光标吗?
无论如何,我无法继续思考。
任何人都可以为我指出一条产生 OCaml 乐趣的道路吗?
这是我的最终解决方案:
let rec sum n m f = if n <= m then (f n)+(sum n+1 m f) else 0;;
但当然,这是错误的。错误是Error: This expression has type 'a -> ('a -> int) -> 'b
but an expression was expected of type int
为什么?什么是'a?