0

私はOCamlにとても慣れていません。初心者が理解できる OCaml のポリモーフィズムの最も簡単な例を教えてください。私は Java、C#、および C++ を知っており、関数型言語についてもある程度の知識があります。

4

3 に答える 3

5

アイデンティティは多形です:

let id x = x
于 2013-01-20T19:35:46.483 に答える
3

OCaml の多相関数の非常に単純な例を次に示します。

let rec length = function
| [] -> 0
| _ :: tail -> 1 + length tail

この関数は、任意のリストの長さを計算します。言い換えれば、リスト内の項目の型は完全にポリモーフィックです。この種のポリモーフィズムはパラメトリックと呼ばれ、さまざまなケースに対して異なる実装を提供することによってポリモーフィズムが達成される、よりオブジェクト指向の種類の「アドホック」ポリモーフィズム (Java など) と区別されます。パラメトリック ポリモーフィズムでは、多くの型で機能する実装が 1 つだけあります。もちろん、OCaml にも OO スタイルのポリモーフィズムがあります。また、Java には「ジェネリック」と呼ばれる一種のパラメトリック ポリモーフィズムがあります。

于 2013-01-20T19:29:40.493 に答える
1

興味がある場合に備えて、ジェフリーが話していたアドホック多相の古典的なOOの「悪い例」を次に示します。

class virtual animal = object
  method virtual say : unit
end

class dog = object
  inherit animal
  method say = print_endline "bark"
end

class cat = object
  inherit animal
  method say = print_endline "meow"
end

let my_animals = [new dog; new cat]

let () = List.iter (fun x -> x#say) my_animals
于 2013-01-20T19:35:28.880 に答える