2009-10-26 18 views
9

मैंने एसआईसीपी से काफी कुछ योजना सीखी लेकिन अब मुझे सामान्य लिस्प में अधिक दिलचस्पी है। मुझे पता है कि सामान्य लिस्प का foldreduce है, बाएं या दाएं तह के लिए विशेष तर्क के साथ, लेकिन unfold के बराबर क्या है? गुगलिंग ने बहुत मदद नहीं की है। वास्तव में मुझे लगता है कि कोई खुलासा नहीं है ???"खुलासा"?

उत्तर

13

आम लिस्प में (loop ... collect ...) है। की तुलना करें

 
(loop for x from 1 to 10 collect (* x x)) 

unfold का उपयोग कर अपने तुल्यता के साथ:

 
(unfold (lambda (x) (> x 10)) 
    (lambda (x) (* x x)) 
    (lambda (x) (+ x 1)) 
    1) 

सामान्य तौर पर, (unfold p f g seed) मूल रूप से

 
(loop for x = seed then (g x) until (p x) collect (f x)) 

संपादित है: ठीक टाइपो

+2

हम्म यह दिलचस्प है। मैं पिछले घंटे के लिए लूप के साथ खेल रहा हूं: पी इसकी महान चीजें! मुझे प्यार है जब प्रोग्रामिंग भाषाओं में इन छोटे प्रकार के एम्बेडेड उपनगरीय होते हैं जिनके पास अपना स्वयं का वाक्यविन्यास और नियमों के सेट को समझने के लिए नियमों का सेट होता है। लूप शक्तिशाली सामान है! – nullpointer

+2

अंधेरे में आपका स्वागत है। – huaiyuan

3

सामान्य लिस्पी हाइपरस्पेक unfold फ़ंक्शन को परिभाषित नहीं करता है, लेकिन आप निश्चित रूप से अपना स्वयं का लिख ​​सकते हैं। इसकी योजना परिभाषा प्रतीक के लिए लगभग प्रतीक का अनुवाद करती है।

+3

धन्यवाद। यह दुर्भाग्यपूर्ण है, लेकिन मुझे लगता है कि हाँ मैं अपना खुद का लिखूंगा। मुझे वास्तव में इतनी शुद्ध होने और इस तरह की खूबसूरत कार्यात्मक भलाई के लिए योजना पसंद है, लेकिन मैंने खुद को गले लगाए, अभी तक अभिव्यक्त सामान्य लिस्प सीखने के लिए इस्तीफा दे दिया है। यह एस्पिरेंटो की बजाय अंग्रेजी सीखना पसंद है, आपको पता है? – nullpointer

संबंधित मुद्दे