計算したいf(..f(x))
p
回です。以下は私のコードです。f(x)のp回の計算方法を教えてください。
let rec function f x p = if p = 0 then x else function f (f x) p-1;;
私はそれを正しくする必要があるのだろうか。
計算したいf(..f(x))
p
回です。以下は私のコードです。f(x)のp回の計算方法を教えてください。
let rec function f x p = if p = 0 then x else function f (f x) p-1;;
私はそれを正しくする必要があるのだろうか。
これは非常に近いですが、コードに構文エラーがあり、処理が難しくなります。私は主な問題はあなたが識別子としてfunction
を使用していると思うが、それはOCamlのキーワードです。 myfun
に変更すると、作業がかなりうまくいくはずです。
また、優先順位を見守る必要があります。次のコード:
f a b-1
は、このように解析されて:あなたはこの第二の解析を取得するには、明示的に括弧を記述する必要が
f a (b - 1)
:
(f a b) - 1
これが好きではありません。
次のように関数を適用するf
何回も(教会の数字を??)再帰関数ch
を定義することができます。
let rec ch f p x = if p = 0 then x else f (ch f (p-1) x);;
あなたの元のコードに問題があることです:
ここにはch
のような名前をつける必要があります。
は、上記のような再帰を得るために同じ関数ch
を呼び出す必要があります。元のコードでは、再帰はありません。
例
let p1 x = x + 1 ;;
ch p1 3 1 ;;
意図したように、これはあなたに
- : int = 3
を与えるだろう。
あなたは素晴らしいです!あなたが指摘した問題は、OCamlの初心者には気付かれません。 –