2016-09-27 2 views

答えて

2

これは非常に近いですが、コードに構文エラーがあり、処理が難しくなります。私は主な問題はあなたが識別子としてfunctionを使用していると思うが、それはOCamlのキーワードです。 myfunに変更すると、作業がかなりうまくいくはずです。

また、優先順位を見守る必要があります。次のコード:

f a b-1 

は、このように解析されて:あなたはこの第二の解析を取得するには、明示的に括弧を記述する必要が

f a (b - 1) 

(f a b) - 1 

これが好きではありません。

+0

あなたは素晴らしいです!あなたが指摘した問題は、OCamlの初心者には気付かれません。 –

0

次のように関数を適用するf何回も(教会の数字を??)再帰関数chを定義することができます。

let rec ch f p x = if p = 0 then x else f (ch f (p-1) x);; 

あなたの元のコードに問題があることです:

  1. ここにはchのような名前をつける必要があります。

  2. は、上記のような再帰を得るために同じ関数chを呼び出す必要があります。元のコードでは、再帰はありません。

let p1 x = x + 1 ;; 

ch p1 3 1 ;; 

意図したように、これはあなたに

- : int = 3 

を与えるだろう。

関連する問題