मैं बस एसआईसीपी (स्वयं के लिए; यह कक्षा के लिए नहीं है) के माध्यम से काम करना शुरू कर रहा हूं, और मैं कुछ दिनों के लिए व्यायाम 1.6 के साथ संघर्ष कर रहा हूं और मुझे लगता है कि मैं इसे समझ नहीं पा रहा हूं । यह एक जहां एलिसा है cond
के मामले में फिर से परिभाषित करता है if
, इसलिए जैसे:एसआईसीपी में व्यायाम 1.6 के लिए स्पष्टीकरण क्या है?
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause))
वह कुछ सरल मामलों पर सफलतापूर्वक यह परीक्षण, और फिर इसे का उपयोग करता है वर्गमूल कार्यक्रम (जो सिर्फ काम फिर से लिखने के लिए if
के साथ ठीक):
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
सवाल तो उससे पूछा "जब एलिसा इस वर्ग जड़ों की गणना करने के बारे में बताएं उपयोग करने का प्रयास तो क्या होगा?।" [यदि आवश्यक हो, तो मुझे अन्य प्रक्रियाओं (good-enough?
, improve
इत्यादि) को पुन: उत्पन्न करने में प्रसन्नता हो रही है), बस मुझे बताएं।]
अब, मुझे पता है कि क्या होता है: यह कभी भी मूल्य नहीं देता है, जिसका अर्थ है कि कार्यक्रम असीम रूप से recurses। मैं बस यह नहीं समझा सकता कि ऐसा क्यों होता है। if
और new-if
के बीच जो भी सूक्ष्म अंतर मौजूद है, वह मुझे दूर कर रहा है। किसी भी और सभी मदद की बहुत सराहना की।
"रिकर्सिव" का क्रिया रूप "रिकर्स" है, इसलिए यह "रिकर्स" होता है। –
आपका प्रश्न शीर्षक गलत है: आप व्यायाम 1.6 का जिक्र कर रहे हैं, 1.4 नहीं। – systemovich
@ गेफरी वान विक आप सही हैं। जब मैंने सवाल लिखा था, मैं एसआईसीपी के पहले संस्करण की अपनी पुरानी प्रति के माध्यम से काम कर रहा था, जिसमें यह समस्या व्यायाम 1.4 के रूप में दिखाई देती है। दूसरे संस्करण में, यह व्यायाम 1.6 है। मैं बदलाव करूंगा। –