में रिवर्स ऑर्डर में फ़ंक्शन रिटर्न सूची मैं एक फ़ाइल से कुछ संख्याएं पढ़ना चाहता हूं, उन्हें एक सूची में ले जाना चाहता हूं और अंत में उन्हें स्क्रीन पर प्रदर्शित करना चाहता हूं। numbers.txt में वर्तमान में 2 3 5 7 11
है, हालांकि आउटपुट के रूप में मुझे 11 7 5 3 2 - : unit =()
OCaml
ऐसा क्यों हो रहा है?
let rec int_list_from_sb sb n =
match n with
| 0 -> [];
| _ -> (bscanf sb " %d" (fun a -> a))::(int_list_from_sb sb (n - 1));;
let file_name = open_in "numbers.txt" in
let sb = Scanning.from_channel file_name in
let int_list = int_list_from_sb sb 5 in
List.iter (fun a -> print_int a) int_list;;
अगर यह दूसरा समारोह यहां, पुनरावर्ती एक, क्या पूर्णांक है कि प्राप्त करने के लिए होता bscanf चुनता है? –
@power_output क्या होता है कि 'int_list_from_sb 4' मूल्यांकन करता है,' एसबी' से 4 नंबर पढ़ता है और '[7; 5; 3; 2] ', फिर' bscanf sb "% d" (मजेदार ए -> ए) 'मूल्यांकन करता है और '11' देता है और फिर' 11 :: [7; 5; 3; 2] 'मूल्यांकन किया जाता है और रिटर्न '[11; 7; 5; 3; 2] '। – sepp2k
@power_output आप भाग्यशाली हो गए हैं, क्योंकि सिस्टम ने अनुमानित तरीके से स्कैनिंग स्थगित कर दी है। परिणाम (* सिद्धांत रूप में *) और भी दिलचस्प हो सकते हैं, क्योंकि 'एसबी' एक परिवर्तनीय संरचना है: कल्पना करें कि क्या होगा यदि दोनों अभिव्यक्तियों का मूल्यांकन किया गया था, उदाहरण के लिए, बदले में। –