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