4

数学で合計関数を実行する OCaml の関数を作成しようとしています。私はこれを試しました:

sum n m f =
    if n = 0 then 0
    else if n > m then f
    else f + sum (n + 1) m f;;

ただし、エラーが発生します-「Characters 41-44: else f * sum(n + 1) mf;; エラー: バインドされていない値の合計と合計に下線が引かれています (ニンジンの記号がそれを指しています)

私はこれを見ました:シンプルな OCaml の演習 同じ質問ですが、私が持っていないものが他にもたくさんあります。たとえば、私の n = m のケースでは fn がなく、else のケースでは f m がありません。

関数が整数を返すようにしたいのに、なぜ fn が必要なのですか? D:何が問題なの!? 前もって感謝します。

4

3 に答える 3

13

あなたは忘れrecました。

let rec sum n m f = ...

再帰関数の場合、「rec」キーワードを手動で含める必要があります。

于 2012-06-11T22:41:20.517 に答える
4
  1. let新しい関数を導入する場合、およびlet recこの関数が再帰的である場合は、キーワードを使用する必要があります。

  2. 最初の引数の名前はなぜfですか? それが関数の場合は、何かに適用する必要があります。

  3. if n = 0 then 0何という奇妙な慣習でしょう!本当にこれが欲しいですか?同上if n > m then f

今のところ、コードは次と同等です

let sum a b c =
  if a = 0 then 0
  else if a > b then c
  else if a < 0 then min (-a*c) ((b-a+1)*c)
  else (b-a+1)*c
于 2012-06-11T23:35:10.657 に答える
0
# let rec sum c = function
    (0,_)          -> 0
  | (n,m) when n>m -> c
  | (n,m)          -> c + sum c (n+1,m)
        ;;

# sum 2 (3,5);;
- : int = 8
于 2015-10-11T19:17:22.433 に答える