मैंने बैटरियों को सफलतापूर्वक स्थापित कर लिया है और इसे काम कर सकता हूं...कुछ हद तक।

बैटरी सिंटैक्स त्रुटि ओपम की सूची के बाद से कोई भी विचार मुझे सिंटैक्स त्रुटि क्यों मिल रही है:

निर्भर करता है: "ओकैमल" {>= "4.00.0" और < "4.10.0"}

और, मैं यहां हूं: ओकैमल टॉपलेवल, संस्करण 4.07.1

0
Eagle Amulet 8 जिंदा 2020, 20:14

1 उत्तर

सबसे बढ़िया उत्तर

यह कोड camlp4 प्रीप्रोसेसर पर निर्भर करता है जो कि बहिष्कृत और अब समर्थित नहीं है। इसके अलावा, सूची समझ अब बैटरी का हिस्सा नहीं है पुस्तकालय और एक अलग पैकेज है। तो आपको इसे opam install pa_comprehension का उपयोग करके इंस्टॉल करना होगा। OCaml टॉपलेवल (या यूटोप) शुरू करने के ठीक बाद निम्नलिखित निर्देश जारी करके आप अभी भी OCaml 4.07.1 के लिए अपना कोड काम कर सकते हैं।

#use "topfind";;
#camlp4o;;
#require "pa_comprehension";;

पहला निर्देश (ध्यान दें कि आपको # टाइप करना है, यह निर्देश का एक हिस्सा है), ocamlfind को ऊपरी स्तर में सक्षम बनाता है (मुझे लगता है कि यूटोप में इसकी आवश्यकता नहीं है, लेकिन चोट नहीं पहुंचेगी)। अगला निर्देश camlp4o सिंटैक्स को सक्षम करता है, ताकि सभी इनपुट प्रीप्रोसेस्ड हों। उसके बाद अब आप OCaml में कोडिंग नहीं कर रहे हैं, बल्कि camlp4o बोली में कोडिंग कर रहे हैं। अंत में, अंतिम निर्देश प्रीप्रोसेसर को लोड करता है जो सूची समझ का समर्थन करता है।

सूची समझ का उपयोग करने वाले कोड को संकलित करने के लिए आपको संकलक के लिए समान विकल्प निर्दिष्ट करने की आवश्यकता है (यानी, सिंटैक्स सक्षम करें, प्रीप्रोसेसर लोड करें), उदाहरण के लिए,

ocamlfind ocamlopt -syntax camlp4o -package pa_comprehension -linkpkg example.ml -o example

Camlp4 पैकेज एक और सूची समझ सिंटैक्स भी प्रदान करता है, जो कि बैटरियों द्वारा प्रदान किए गए एक से थोड़ा अलग है। इसे camlp4.listcomprehension कहा जाता है, और आप इसे मोटे तौर पर समान इनवोकेशन मॉड्यूलो पैकेज नाम के साथ उपयोग कर सकते हैं, उदाहरण के लिए, टॉपलेवल में,

#use "topfind";;
#camlp4o;;
#require "camlp4.listcomprehension";;

और संकलित करने के लिए

ocamlfind ocamlopt -syntax camlp4o -package camlp4.listcomprehension -linkpkg example.ml -o example

इन सब बातों के साथ, मैं आपको आधुनिक दिनों में camlp4 सूची समझ का उपयोग करने से अत्यधिक हतोत्साहित करता हूँ। यह एक अप्रचलित तकनीक है।

इसके अलावा, आपका उदाहरण गलत है, आप समापन कोष्ठक में ? वर्ण खो रहे हैं, उदाहरण के लिए, यह शीर्ष स्तर के साथ एक उदाहरण इंटरैक्शन है,

   # #use "topfind";;
   # #camlp4o;;
   # #require "pa_comprehension";;
   # open Batteries;;
   # [? x | x <- 1--10; x mod 2 = 0 ?];;
   - : int Batteries.Enum.t = <abstr>
1
ivg 8 जिंदा 2020, 21:22