関数型プログラミング(OCaml)を学び始めましたが、fpに関する重要なトピックの1つである署名を理解していません(適切な名前かどうかはわかりません)。何かを入力してocamlでコンパイルすると、たとえば次のようになります。
# let inc x = x + 1 ;;
val inc : int -> int = <fun>
これは些細なことですが、なぜこれなのかわかりません。
let something f g a b = f a (g a b)
出力を与えます:
val something : (’a -> ’b -> ’c) -> (’a -> ’d -> ’b) -> ’a -> ’d -> ’c = <fun>
このトピックは多くの人にとって絶対にfpの基本であると思いますが、インターネット上でOCamlの署名について何も見つけられなかったので、ここで助けを求めます(Haskellの署名に関する記事はいくつかありますが、説明はありません) )。
このトピックがどういうわけか生き残るのであれば、私はここにいくつかの関数を投稿しますが、その署名は私を混乱させました:
# let nie f a b = f b a ;; (* flip *)
val nie : (’a -> ’b -> ’c) -> ’b -> ’a -> ’c = <fun>
# let i f g a b = f (g a b) b ;;
val i : (’a -> ’b -> ’c) -> (’d -> ’b -> ’a) -> ’d -> ’b -> ’c = <fun>
# let s x y z = x z (y z) ;;
val s : (’a -> ’b -> ’c) -> (’a -> ’b) -> ’a -> ’c = <fun>
# let callCC f k = f (fun c d -> k c) k ;;
val callCC : ((’a -> ’b -> ’c) -> (’a -> ’c) -> ’d) -> (’a -> ’c) -> ’d = <fun>
ヘルプと説明をありがとう。