2009-08-29 7 views
1

私は宿題のためのOCamlで、次の実装しようとしていると、次の実装:例えば、はOCamlの

g(n) = y if n = x else f(n) 

ので

if f(n) = n+1, x = 7, y=42, then g(1) = 2, but g(7) = 42 

私が持っている:

# let update f x y = f(x) = y;; 
val update : ('a -> 'b) -> 'a -> 'b -> bool = < fun> 

しかし、私はブール値の代わりに関数を返すために使用する構文を知らないだけです。

誰かが問題を解決するよう求めているわけではありませんが、関数を取り込んで操作して返すコードを投稿できる人は、感謝します。

答えて

1

私はあなたの宿題を理解していません - あなたはそれを返す代わりにf(n)を呼びたくないと確信していますか?

しかし、いくつかの例 - それは返す型が関数であることを

(* given a number, return a function that takes an int 
    and returns integer + number *) 
let adder n = 
    let f x = n+x in 
    f 

注別の関数を返す関数:基本的に

# adder 10;; 
- : int -> int = <fun> 
# let g = adder 10;; 
val g : int -> int = <fun> 
# g 20;; 
- : int = 30 

、機能を返すために、あなたが定義しますそれを返すだけです。

のは、あなたがにしたいとしましょうは機能を取り、double型の値を返す関数を返す:

let doubler f = 
    let g x = 2 * (f x) in 
    g 

# let f x = x + 1;; 
val f : int -> int = <fun> 
# let g = doubler f;; 
val g : int -> int = <fun> 
# g 10;; 
- : int = 22 
+0

おかげでたくさん!これと私のメールに返信した教授の間で、私はそれを理解することができました。 クラスの誰かがこのページでGoogleを介して終了した場合に宿題期限を過ぎて解決策を投稿します。 –