मैं यह जांचने में सक्षम होना चाहता हूं कि इसे एक्सेस करने से पहले एक चर परिभाषित किया गया है या नहीं।मैं कैसे परीक्षण कर सकता हूं कि एक संदर्भ को संदर्भित करने से पहले परिभाषित किया गया है या नहीं?
मुझे एक वैश्विक होना पसंद है जो "डीबग स्तर" निर्दिष्ट करता है। यदि डीबग स्तर 0 है, तो कोई अतिरिक्त आउटपुट नहीं दिया जाता है। 1 से अधिक होने पर, डीबग आउटपुट दिया जाता है, अधिक संख्या में अधिक verbosity के साथ।
मैं इसे भी सेट अप करना चाहता हूं ताकि प्रक्रियाएं चलें, और स्तर 0 मान लें, अगर मैं इसे परिभाषित करने के लिए नहीं मिला था। कुछ की तरह:।। (जहां defined?
जादू है मैं कैसे करना है पता नहीं है
(if (and (defined? debug-level) (> debug-level 1))
(diplay "Some debugging info"))
मैं The Scheme Programming Language, 4th Edition में रूपों में से सारांश के माध्यम से ध्यान दिया है केवल एक ही है कि मैंने देखा के रूप में एक संभावना identifier?
था यह किया । काम नहीं
मैं SISC 1.16.6 उपयोग कर रहा हूँ और Chez छोटा योजना v8 (R6RS अनुपालन का दावा है)
संपादित मैं की तरह एक guard
साथ eval
लपेटकर की कोशिश की (R5RS अनुपालन का दावा है):
(guard (x (else #f)) (eval 'debug-level))
'debug-level
उद्धृत किया गया है, इसका मूल्यांकन किया जा सकता है और eval
पर पास किया जा सकता है। फिर जब eval
इसका मूल्यांकन करने का प्रयास करता है, तो एक त्रुटि होगी, जिसे मैंने आशा की थी कि guard
पकड़ लेंगे। ऐसा नहीं हुआ
संपादित 2 मुझे एहसास हुआ कि मैं डिबग एक अलग प्रक्रिया में अनुरेखण रैप करने के लिए चाहता था और उस फ़ाइल को परिभाषित करता है कि कि प्रक्रिया भी एक अलग प्रक्रिया का उपयोग कर के लिए की 0. कारणों में एक डिफ़ॉल्ट debug-level
परिभाषित कर सकते हैं कम करने के लिए कर रहे हैं काम करने वाली प्रक्रियाओं में लाइनों की संख्या और आवश्यकता होने पर डीबग आउटपुट के पुनर्निर्देशन की अनुमति देने के लिए।
धन्यवाद। मुझे डर था कि जवाब व्यापक रूप से पोर्टेबल नहीं होगा, यह आर 6 आरएस या कार्यान्वयन विशिष्ट में कुछ नया होगा। +1, लेकिन मैं इस उत्तर की उम्र को थोड़ी देर देने जा रहा हूं, यह देखने के लिए कि क्या सही विचार स्वीकार करने से पहले कोई बेहतर विचार पोस्ट किया गया है या नहीं। –