0

現在、タイプ 'a -> 'a の関数とタイプ 'a の引数を取り、関数を 2 回呼び出すタイプ ('a -> 'a) -> 'a -> 'a の関数を定義しようとしています。議論について。私はOCamlに比較的慣れていませんが、関数を定義する方法は知っていますが、試行錯誤や、関数を引数として取り、その関数を2回適用する関数を取得しようとするGoogleに運がありませんでした。

事前に感謝します。

編集: 以下の Jeffrey のおかげで、私の問題は解決されました。

let f4 ga = g (ga );;

val f4 : ('a -> 'a) -> 'a -> 'a =

4

1 に答える 1

1

OCaml は型を推論するので、引数を関数として使用すると、関数であると推論します。次に例を示します。

# let f g = g 8 + g 10;;
val f : (int -> int) -> int = <fun>
# (~-);;
- : int -> int = <fun>
# f (~-);;
- : int = -18

例を理解するに(~-)は、 が通常の整数否定演算子であることに注意してください。

更新:より複雑な問題のヒント。の値をテストする必要がありますn。多分if声明はうまくいくでしょうか?2 番目のヒント: 再帰を使用する場合、ループを使用する必要はありません。ループを使用する場合は、再帰を使用しないでください。(個人的には、再帰の使用をお勧めします。これは、ピアノを学びながらスケールを演奏するようなものです。)

于 2013-03-07T23:56:17.043 に答える