1

私は宿題のために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>

しかし、ブール値の代わりに関数を返すようにするために使用する必要がある構文がわかりません。

私は誰かに問題を解決するように求めているのではありませんが、誰かが関数を取り込んで操作し、それを返すコードを投稿できれば幸いです。

4

1 に答える 1

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

基本的に、関数を返すには、関数を定義して返すだけです。

関数を取り、2 倍の値を返す関数を返したいとしましょう。

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
于 2009-08-29T08:20:42.103 に答える