2008-09-17 15 views
20

में मैक्रो समर्थन प्रैक्टिकल कॉमन लिस्प पढ़ने के बाद मुझे अंत में समझ में आया कि मैक्रोज़ के बारे में बड़ा सौदा क्या था, और मैं .NET प्लेटफ़ॉर्म के लिए एक भाषा की तलाश कर रहा हूं जो इसका समर्थन करता है। .NET के लिए कुछ लिस्पी बोलीभाषाएं हैं, लेकिन जो कुछ मैं इकट्ठा करने में सक्षम हूं, वह बहुत बीटा या त्याग दिया गया है। हाल ही में क्लोजर द्वारा मेरी दिलचस्पी बढ़ी है, लेकिन यह जावा प्लेटफार्म के लिए है और संभवत: ikvm का उपयोग कर सकता है, यह कुछ एकीकृत महसूस नहीं करता है। खासकर जब आप डब्ल्यूपीएफ जैसी चीजें करना चाहते हैं।एफ #

हाल ही में मैं एफ # के बारे में फुसफुसा रहा हूं, मैंने दस्तावेज़ीकरण को देखने की कोशिश की अगर मुझे मैक्रो समर्थन के बारे में कुछ भी मिल सके, लेकिन उसे नहीं मिला। तो क्या किसी को पता है?

धन्यवाद :)

उत्तर

10

ठीक है, एफ # ओकैम पर आधारित है और ओकैमल के पास extensive macro system है। एफ # और ओकैमल की सिंटैक्टिक और अर्थपूर्ण समानताओं को देखते हुए आप ओकैम मैक्रो सिस्टम पर एफ # पर पोर्ट कर सकते हैं।

ओकैम के मैक्रो सिस्टम को चोरी करने के अलावा मैं एफ # के लिए डिब्बाबंद मैक्रो सिस्टम से अनजान हूं।

+3

पोर्टिंग camlp4 एक छोटा काम नहीं है। लेकिन जब तक आप एफ # के ओकंपल-संगत सबसेट में रह रहे हैं, तब तक इसकी आवश्यकता नहीं है। हालांकि पूरी प्रक्रिया के लिए कुछ मैन्युअल सेटअप की आवश्यकता होगी और कुछ बाधाओं का कारण बन जाएगा। – ygrek

+0

यह लिंक टूटा हुआ है: (http://www.ocaml-tutorial.org/camlp4_3.10) – theoski

7

नहीं। एफ # के लिए कोई मैक्रोज़ नहीं।

+0

कोई मैक्रो सिस्टम के प्रतिस्थापन के रूप में गणना अभिव्यक्तियों पर विचार करना चुन सकता है, इस अर्थ में कि यह डोमेन विशिष्ट भाषाओं को बनाने के लिए अनुमति देता है। – BitTickler

4

लेकिन अच्छा भयावहता उन ocaml उदाहरण में वाक्य रचना अस्पष्ट लग रहा है

वहाँ आप एक ही मौलिक वाक्यात्मक व्यापार बंद आप लिस्प के साथ क्या में चला रहे हैं। यदि आप लिस्प-जैसे मैक्रोज़ की शक्ति चाहते हैं, तो आप या तो भाषा के लिए लिप-जैसे सिंटैक्स के साथ समाप्त होते हैं, या फिर आपका मैक्रो सिंटैक्स आपके नियमित वाक्यविन्यास से काफी अलग दिखता है ... किसी भी दृष्टिकोण के साथ कुछ भी गलत नहीं है, बस अलग-अलग विकल्प

+1

वास्तव में नहीं। ओकैमल के मैक्रोज़ विभिन्न प्रकार के सिंटैक्टिक संरचनाओं (जैसे टाइप परिभाषा बनाम अभिव्यक्तियों) के बीच अंतर करने की आवश्यकता से जटिल होते हैं क्योंकि उन्हें विभिन्न स्थिर प्रकारों के मूल्यों द्वारा दर्शाया जाता है। गणित के पास एक ही समय में समृद्ध वाक्यविन्यास और शक्तिशाली मैक्रोज़ हैं, उदाहरण के लिए। –

13

http://nemerle.org/ पर नेमेरल, एक .NET भाषा (मोनो का समर्थन भी करता है) जो सी # के करीब दृष्टि से रहते हुए कई कार्यात्मक प्रोग्रामिंग प्रतिमान का समर्थन करता है। इसमें व्यापक मैक्रो समर्थन है।

6

क्या आपने Boo पर देखा है? जबकि बू में मैक्रोज़ नहीं हैं, इसमें एक खुली कंपाइलर पाइपलाइन है, जो वाक्य रचनात्मक मेटाप्रोग्रामिंग के लिए मैक्रोज़ का एक अच्छा विकल्प है।

[संपादित करें] टिप्पणियों में उल्लेख के अनुसार, बू में अब मैक्रोज़ हैं।

+4

बूओ में वर्तमान में मैक्रोज़ हैं (यह आपके द्वारा पोस्ट किए जाने पर मामला नहीं हो सकता है)। – JasonTrue

+0

हो सकता है। अधिक संभावना है, जब मैंने इसे पोस्ट किया था, तब मैक्रोज़ किया था, लेकिन जब मैंने पिछली बार चेक किया था (जो उस पोस्ट से बहुत पहले था।) इससे कोई फर्क नहीं पड़ता, क्योंकि आप खुले के साथ मैक्रोज़ के साथ जो कुछ भी कर सकते हैं वह कर सकते हैं कंपाइलर और इसके विपरीत। –

1

यह आपके इच्छित चीज़ों के मुकाबले दूसरी तरफ हो सकता है, लेकिन क्या आप RDNZL के बारे में जानते हैं? यह एक फोयरिग-फ़ंक्शन इंटरफ़ेस (एफएफआई) है जो आपको अपने लिस्प कोड से .NET पुस्तकालयों को कॉल करने देता है।

वे शायद किसी भी सामान्य लिस्प या योजना कार्यान्वयन से बहुत कम परिपक्व हैं, लेकिन .NET: L# और DotLisp के लिए लिस्प बोलीभाषाएं हैं।

+1

बस एफवाईआई डॉटलिस्ट को अब और नहीं रखा जा रहा है (रिच क्लोजर के पीछे आदमी है) इसलिए मुझे नहीं लगता कि मैं इसके साथ गड़बड़ करूँगा। दिमाग अगर आप एक लिस्पी की तरह चाहते हैं जो सीएल/स्कीम नहीं है तो मैं व्यक्तिगत रूप से क्लोजर का उपयोग करूंगा। – Runevault

+0

डॉटलिस्प स्वीकार्य रूप से थोड़ा स्टंट किया गया है, लेकिन ऐसा इसलिए है क्योंकि यह स्थिर है, काम कर रहा है, और मैं अपने पैच अपलोड करने में बहुत व्यस्त हूं :-( –

1

.net

IronScheme के लिए दो सक्रिय रूप से विकसित Lisps हैं - डीएलआर आधारित योजना कार्यान्वयन

Xronos - clojure

+0

एक्स्रोनोस मुझे देखता है। क्लोजर सीएलआर देखें - https://github.com/richhickey/ क्लोजर-क्लियर/विकी/ – Justin

2

की डीएलआर आधारित बंदरगाह कैसे एफ # कोटेशन का उपयोग कर के बारे में?

http://tomasp.net/blog/fsquotations.aspx

+2

कोटेशन केवल आपको रनटाइम प्रस्तुति प्राप्त करने के लिए कोड उद्धृत करने देते हैं, और F # उद्धरण अक्सर आपको ऐसा करने की अनुमति नहीं देते हैं (उदाहरण के लिए F # '<@ a @>' उद्धृत करने से इंकार कर देता है)। मैक्रोज़ आपको और अधिक करने देते हैं, उदाहरण के लिए भाषा का सिंटैक्स बदलें। एफ # में ऐसा करने का कोई तरीका नहीं है। एफ # में पूर्ण कोडडॉम नहीं है, इसलिए आप प्रोग्रामिंग रूप से एफ # कंपाइलर का उपयोग नहीं कर सकते हैं। दरअसल, आप कह सकते हैं कि एफ # विशेष रूप से इस तरह से रोकने के लिए डिज़ाइन किया गया है प्रोग्रामिंग का। –

3

हाल ही में मैं एफ # के बारे में कानाफूसी सुनवाई कर रहा है, मैं प्रलेखन पर देखने अगर मैं मैक्रो समर्थन के बारे में कुछ भी मिल सकता है, लेकिन यह नहीं मिला है की कोशिश की। तो क्या किसी को पता है?

एफ # मैक्रोज़ का समर्थन नहीं करता है और यह असंभव है कि यह कभी भी होगा।

4

मैंने सोचा कि मुझे यह इंगित करना चाहिए कि अब Clojure का एक बहुत सक्रिय .NET/मोनो पोर्ट है। प्रश्न में उल्लिखित अनुसार क्लोजर LISP शैली मैक्रोज़ का समर्थन करता है।

जैसा कि अन्य ने कहा है, मैक्रोज़ इस बिंदु पर (देर से 2010) में एफ # में समर्थित नहीं हैं।

0

मैं वर्तमान में एफ # में मेटा प्रोग्रामिंग की संभावनाओं की जांच कर रहा हूं। यदि हम मैक्रोज़ को टेक्स्ट टेम्पलेट के रूप में परिभाषित करते हैं जो कोड में फैलता है तो दो स्पष्ट दृष्टिकोण होते हैं:

  1. टी 4 टेम्पलेट्स। एफ #: https://github.com/kerams/Templatus

  2. के लिए कार्यान्वयन है मैंने स्ट्रिंग्स से अलग असेंबली में F # से कहीं भी आमंत्रण देखा है और फिर असेंबली लोड कर रहा है।