Jason Hickey の Introduction to Objective Caml を学んでいます。
let
第 3 章を学んだ後、とがどのように機能するかを理解したようです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
なんで?とは何ですか?