4

C ++とJava以外のプログラミング言語を味わうために、OCamlを少し学びたいと思います。次のプログラムを手伝っていただければ、とても助かります。基本的に、ユーザーは正の整数を入力します。Nから0までのすべての整数の合計が出力されます。

明らかに整数を作成しN、ユーザーにその値を入力させます。sumタイプの変数を作成しますint。の値を1つ増やしてからデクリメントするforループを作成Nします。ループは1より大きい間実行されますが、OCamlの構文でこれを行う方法がわかりません。sumNN

どんな助けでも大歓迎です。

4

1 に答える 1

9

アルゴリズムを説明する方法は、通常、C++またはJavaでアルゴリズムを実装する方法です。OCamlでも同じように書くことができますが、慣用的な方法は、次のように変数を変更しない再帰関数になります。

let rec print_sum acc n =
  if n <= 0
  then Printf.printf "Sum: %d\n" acc
  else print_sum (acc + n) (n - 1)

で呼び出す:print_sum 0 11 ;;

再帰関数を作成するには:

  1. 最初に、再帰する必要がない場合の基本ケースについて考えます。これはあなたがそれを忘れることからあなたを救うでしょう(ここでは、それはそうですn <= 0
  2. 一般的なケース:すでに書かれているベースケースにどのように一歩近づくことができますか?これは、で関数を呼び出すことによるものn-1です。
于 2013-01-06T11:10:19.190 に答える