मेरे पास ओकैमल में कई कार्यक्रम लिखे गए हैं, उनमें से कुछ फ़ैक्टर का उपयोग करते हैं। अब, मैं एफ # में कोड के एक हिस्से को लिखने और फिर से लिखने पर विचार कर रहा हूं (ओकैम के पास कुछ फायदों का लाभ उठाने के लिए)। एक बात मुझे डर है कि ओकैमल में कौन से मज़ेदार काम करते हैं, एफ # में कोड लिखना है।OCaml में क्या फ़ैक्टर डॉक्टर करते हैं F # में कोड कैसे लिखें?
उदाहरण के लिए, हम एफ # में this example from OCaml manual का अनुकरण कैसे कर सकते हैं?
type comparison = Less | Equal | Greater
module type ORDERED_TYPE = sig
type t
val compare: t -> t -> comparison
end
module Set =
functor (Elt: ORDERED_TYPE) -> struct
type element = Elt.t
type set = element list
let empty = []
let rec add x s =
match s with
[] -> [x]
| hd::tl ->
match Elt.compare x hd with
Equal -> s (* x is already in s *)
| Less -> x :: s (* x is smaller than all elements of s *)
| Greater -> hd :: add x tl
end
module OrderedString = struct
type t = string
let compare x y = if x = y then Equal else if x < y then Less else Greater
end
module OrderedInt = struct
type t = int
let compare x y = if x = y then Equal else if x < y then Less else Greater
end
module StringSet = Set(OrderedString)
module IntSet = Set(OrderedInt)
let try1() = StringSet.add "foo" StringSet.empty
let try2() = IntSet.add 2 IntSet.empty
इस विस्तृत उत्तर के लिए धन्यवाद ... जब आप "भारी हाथ दृष्टिकोण" कहते हैं, तो आपका मतलब है कि अभ्यास में लोग इस तरह कोड नहीं करेंगे? – SoftTimur
@ सॉफ़्ट टिमूर: क्रमबद्ध करें - मैंने मूल कोड से दूर नहीं जाने की कोशिश की, और जब तक मैं 'सेट' प्रकार के माध्यम से प्राप्त हुआ, तब तक यह मेरे लिए प्राकृतिक नहीं था। यह बहुत दूर नहीं है, लेकिन अगर मैंने क्लीन शीट से शुरू किया तो मैं कुछ अलग हो गया होगा। – scrwtp
@ सॉफ़्ट टिमूर: हो सकता है कि यह 'सेट' पर केवल समेकित प्रकार पैरामीटर है। – scrwtp