OCaml
सूची प्रसंस्करण
खोज…
List.Map
List.map हस्ताक्षर हैं ('a -> 'b) -> 'a list -> 'b list जो अंग्रेजी में एक समारोह है कि एक समारोह लेता है अर्थात् एक प्रकार से (हम इस मानचित्रण समारोह फोन करता हूँ) ( 'a ) दूसरे प्रकार (अर्थात् 'b ) और पहले प्रकार की सूची के लिए। फ़ंक्शन दूसरे प्रकार की एक सूची देता है जहां हर तत्व पहली सूची के एक तत्व पर मैपिंग फ़ंक्शन को कॉल करने का परिणाम है।
List.map string_of_int [ 1; 2; 3; 4 ]
#- [ "1"; "2"; "3"; "4" ] : string list
'b और 'b 'a प्रकार अलग-अलग नहीं हैं। उदाहरण के लिए, हम उनके वर्गों में आसानी से नंबर मैप कर सकते हैं।
let square x = x * x in
List.map square [ 1; 2; 3; 4 ]
#- [ 1; 4; 9; 16 ] : int list
किसी सूची में डेटा एकत्र करना
List.fold_left और List.fold_right फ़ंक्शंस उच्च-ऑर्डर फ़ंक्शंस हैं जो सूची एकत्रीकरण के बाहरी तर्क को लागू करते हैं। किसी सूची को एकत्र करना, कभी-कभी एक सूची को कम करने के रूप में भी संदर्भित किया जाता है, जिसका अर्थ है कि उस सूची में सभी वस्तुओं के अनुक्रमिक निरीक्षण से प्राप्त मूल्य की गणना करना।
सूची मॉड्यूल के प्रलेखन में कहा गया है कि
-
List.fold_left fa [b1; ...; bn]f (... (f (fa b1) b2) ...) bn। -
List.fold_right f [a1; ...; an] bf a1 (f a2 (... (f an b) ...))। (यह बाद का कार्य पूंछ-पुनरावर्ती नहीं है।)
सादे अंग्रेजी कंप्यूटिंग सूची में। List.fold_left fa [b1; ...; bn] सूची के माध्यम से चलने की मात्रा [b1; ...; bn] एक संचायक शुरू में करने के लिए सेट पर नज़र रखने के a : हर बार जब हम सूची में किसी आइटम को देखने के लिए, हम का उपयोग करें f संचायक का मान अपडेट, और जब हम किया जाता है, संचायक हमारे गणना के अंतिम मूल्य है। List.fold_right फ़ंक्शन समान है।
यहाँ कुछ व्यावहारिक उदाहरण दिए गए हैं:
संख्याओं की सूची के कुल योग की गणना करें
List.fold_left ( + ) 0 lst
फ्लोट की सूची के औसत की गणना करें
let average lst =
let (sum, n) =
List.fold_left (fun (sum, n) x -> (sum +. x, n + 1)) (0.0, 0) lst
in
sum /. (float_of_int n)
बुनियादी सूची प्रसंस्करण को फिर से लागू करें
कार्य List.fold_left । List.fold_left और List.fold_right इतनी सामान्य हैं कि उनका उपयोग सूची मॉड्यूल से लगभग हर दूसरे कार्य को कार्यान्वित करने के लिए किया जा सकता है:
let list_length lst = (* Alternative implementation to List.length *)
List.fold_left ( + ) 0 lst
let list_filter predicate lst = (* Alternative implementation to List.filter *)
List.fold_right (fun a b -> if predicate a then a :: b else b) lst []
List.iter फ़ंक्शन को List.iter करना और भी संभव है, याद रखें कि () इस कोड को सूची एकत्रीकरण के एक और उदाहरण के रूप में व्याख्या करने के लिए प्रोग्राम की वैश्विक स्थिति है:
let list_iter f lst = (* Alternation implementation to List.iter *)
List.fold_left (fun () b -> f b) () lst
इन उदाहरणों को सीखने की सामग्री माना जाता है, इन कार्यान्वयनों में मानक पुस्तकालय से संबंधित कार्यों पर कोई पुण्य नहीं है।