1
私は学校でOCamlを学んでいますが、最近私は理解できない課題のためのプログラムを見つけ、誰かが私に説明できるかどうかを期待していました。ここでは、コードがあります:OCaml自然数を追加する
(* Natural numbers can be defined as follows:
type = ZERO | SUCC of nat;;
For instance, two = SUCC (SUCC ZERO) and three = SUCC (SUCC (SUCC ZERO)).
Write a function 'natadd' that adds two natural numbers in this fashion. *)
# type = ZERO | SUCC of nat;;
# let two = SUCC (SUCC ZERO);;
# let three = SUCC (SUCC (SUCC ZERO));;
# let rec natadd : nat -> nat -> nat =
fun n1 n2 ->
match n1 with
| ZERO -> n2
| SUCC n1 -> SUCC (natadd n1 n2)
;;
ここでは、コードのサンプル出力です:
# natadd two three;;
- : nat = SUCC (SUCC (SUCC (SUCC (SUCC ZERO))))
私は理解していないものと一致し-と文です。 n1が非ゼロの場合、SUCCを追加し、再帰呼び出しではn1の代わりに[SUCC n1]を新しい引数として使用することを意味しますか?
ありがとう!私が疑問に思っていたもう1つのことは、再帰関数がどのように停止するかを知っていますか? – Sean
@Sean ZEROに達したときに停止します。その場合は、再度呼び出しません。 – Bergi
ありがとうございました!スコープの問題も出てくるので、混乱するかもしれないと言ったときの意味を理解しています。私は今日何かを学んだ。 – Sean