"द सीजनेड शेमर" पढ़ते समय मैंने letrec
के बारे में जानना शुरू कर दिया है। मैं समझता हूं कि यह क्या करता है (जिसे वाई-कॉम्बिनेटर के साथ डुप्लिकेट किया जा सकता है) लेकिन पुस्तक पहले से define
डी फ़ंक्शन पर आवर्ती होने के तर्कों के आधार पर इसका उपयोग कर रही है जो स्थिर रहती है।लेट्रेक के क्या फायदे हैं?
define
घ समारोह पर ही आवर्ती (कुछ खास नहीं) का उपयोग कर एक पुराने समारोह का एक उदाहरण: कि एक ही समारोह का एक उदाहरण के लिए
(define (substitute new old l)
(cond
((null? l) '())
((eq? (car l) old)
(cons new (substitute new old (cdr l))))
(else
(cons (car l) (substitute new old (cdr l))))))
अब लेकिन letrec
का उपयोग कर:
(define (substitute new old l)
(letrec
((replace
(lambda (l)
(cond
((null? l) '())
((eq? (car l) old)
(cons new (replace (cdr l))))
(else
(cons (car l) (replace (cdr l))))))))
(replace lat)))
एक तरफ थोड़ा लंबा होने और पढ़ने के लिए और अधिक कठिन होने से मुझे नहीं पता कि वे लेट्रेक का उपयोग करने के लिए पुस्तक में क्यों काम लिख रहे हैं। क्या एक स्थैतिक चर पर आवर्ती होने पर गति गति बढ़ जाती है क्योंकि आप इसे पास नहीं करते हैं ??
क्या तर्क के साथ कार्यों के लिए यह मानक अभ्यास स्थिर है, लेकिन एक तर्क जो कम हो गया है (जैसे किसी सूची के तत्वों को आवर्ती करना)?
अधिक अनुभवी स्कैमर/लिस्पर्स से कुछ इनपुट मदद करेगा!
विस्तृत करने के लिए धन्यवाद! पाठ्यक्रम का +1। –
सामान्य रूप से, अच्छी तरह लिखित और बहुत उपयोगी (समय मॉड्यूल का उल्लेख करने के लिए धन्यवाद)। मुझे पता है कि मुझे आपकी बहुत सारी मदद मुफ्त में मिल रही है, इसलिए, एली को धन्यवाद कि आप अपने उत्तर पोस्ट करने के लिए समय दें। अन्य पोस्टर्स के साथ आपकी टिप्पणी चर्चा उन छोटी चीजों में भी सहायक होती है जिन्हें मैं नहीं जानता या नहीं। फिर से धन्यवाद! – Ixmatus