मैं एमआईटी योजना में इस तुच्छ (कॉमन लिस्प में) मैक्रो के बराबर बनाने के लिए कोशिश कर रहा द्वारा विस्मित कर रहा हूँ:लैम्बडा फॉर्म लौटने के लिए आप एमआईटी स्कीम मैक्रो कैसे लिखते हैं?
(defmacro funcify (exp)
`(lambda (x) ,exp))
यह एक सरल व्यक्तिगत परियोजना के लिए, एक संख्यात्मक समीकरण solver में बनाया कार्यों के आधार पर दूसरा एसआईसीपी व्याख्यान। मुझे परवाह नहीं है कि यह मैक्रो "सुरक्षित" या "स्वच्छ" नहीं है या यदि एक्स एक्स के अलावा किसी भी प्रतीक का संदर्भ देता है तो एक चर को कैप्चर करेगा। मैं
(solv '(* 60 x) '(* 90 (- x 1)))
लिखने में सक्षम होना चाहते हैं जहां solv है:
(define (solv lh-exp rh-exp)
(solve (funcify lh-exp) (funcify rh-exp)))
बजाय टाइप करने के लिए
(solve (lambda (x) (* 60 x)) (lambda (x) (* 90 (- x 1))))
होने लेकिन यह कैसे का उपयोग कर ऐसा करने के लिए को समझ नहीं सकता की
एमआईटी योजना वाक्यविन्यास-नियम।
मैं इस की कोशिश की है, लेकिन यह काम नहीं करता है:
(define-syntax funcify
(syntax-rules()
((funcify y) (lambda (x) y))))
;Value: funcify
(funcify x)
;Value 17: #[compound-procedure 17]
((funcify x) 10)
;Unbound variable: x
मैं शायद eval
शामिल लेकिन कोई लाभ नहीं हुआ उल्लेख के लायक नहीं अन्य बातों की कोशिश की है।
इसके अलावा, योजना के मैक्रो सिस्टम पर अच्छे ट्यूटोरियल (संदर्भ नहीं) के संदर्भ जो छोटे सरल उदाहरणों के साथ शुरू होते हैं और पर्याप्त टिप्पणी के साथ निर्माण करते हैं, और विशेष रूप से बैकक्वोट-कॉमा शैली LISP मैक्रोज़ को परिवर्तित करने के तरीके को दिखाते हैं (जो मेरे लिए है बेहद सहज) योजना के सिंटैक्स मैक्रो सिस्टम के लिए बहुत अच्छा होगा।
ईआर कार्यान्वयन के लिए +1 (जो एमआईटी योजना का समर्थन करता है)। :-) –
@ क्रिसजेस्टर-यंग बग फिक्स के लिए धन्यवाद। :) –
+1। बहुत बहुत धन्यवाद। परिभाषित-वाक्यविन्यास पूरी तरह से परेशान है लेकिन मुझे संदेह है कि यह बहुत शक्तिशाली है, मैं इसे बेहतर सीखना चाहता हूं, इस पर गति देने के लिए कोई संदर्भ? मैं आपका जवाब स्वीकार कर रहा हूं क्योंकि यह एमआईटी योजना में काम करता है कि एक मज़ेदारता देता है, मेरी इच्छा है कि मैं क्रिस के जवाब को भी स्वीकार कर सकता हूं क्योंकि यह भी बताता है कि सोलव एक सिंटैक्स-नियम मैक्रो भी होना चाहिए। – Bogatyr