2014-10-20 5 views
6

मैं ओकैमल फ़ंक्शंस के "उन्नत" उपयोगों की खोज कर रहा हूं और मैं सोच रहा हूं कि मैं तर्कों की चर संख्या के साथ एक फ़ंक्शन कैसे लिख सकता हूं।तर्कों की चर संख्या के साथ OCaml फ़ंक्शन

उदाहरण के लिए

, की तरह एक समारोह:

let sum x1,x2,x3,.....,xn = x1+x2,+x3....+xn 

उत्तर

8

प्रकार hackery का एक सा के साथ, यह सुनिश्चित करें:

let sum f = f 0 
let arg x acc g = g (acc + x) 
let z a = a 

और (

एक ही प्रकार के तर्क के परिवर्तनशील को संभालने के लिए स्पष्ट रास्ता एक सूची पारित करने के लिए है एबी) उपयोग:

# sum z;; 
- : int = 0 
# sum (arg 1) z;; 
- : int = 1 
# sum (arg 1) (arg 2) (arg 3) z;; 
- : int = 6 

नीट, हुह? लेकिन इसका उपयोग न करें - यह एक हैक है।

एक स्पष्टीकरण के लिए, this page देखें (एसएमएल के संदर्भ में, लेकिन विचार समान है)।

+0

मैं इसका उपयोग नहीं करता क्योंकि एक int सूची उत्तीर्ण करना बेहतर तरीका है। लेकिन उच्च स्तरीय कार्यों और निरंतरता उत्तीर्ण शैली का बहुत अच्छा उपयोग। –

9

OCaml दृढ़ता से लिखा गया, और कई अन्य (untyped) भाषाओं में इस्तेमाल तकनीक अयोग्य हैं। मेरी राय में (प्रोग्रामिंग के 50 वर्षों के बाद) यह एक बहुत अच्छी बात है, कोई समस्या नहीं।

# let sum l = List.fold_left (+) 0 l;; 
val sum : int list -> int = <fun> 
# sum [1;2;3;4;5;6];; 
- : int = 21 
संबंधित मुद्दे