आपका कार्य किसी प्रोग्रामिंग लैंग्वेज के लिए एक फ़ीचर से निपटना है, या तो बहुत ही चतुर लाइब्रेरी को लागू करके, या इनपुट टेक्स्ट को प्रोसेस करके और / या संकलन प्रक्रिया को ट्विक करके।
विचार:
- सी (जैसे
<?c printf("Hello,"); ?> world!
) के लिए PHP- शैली प्रस्तुति interleaving जोड़ें । - उन भाषाओं में से एक के लिए एक नल coalescing ऑपरेटर जोड़ें जो C # नहीं है।
- PHP में macros जोड़ें।
goto
जावास्क्रिप्ट में जोड़ें ।- भाषा X से मेल खाते हुए पैटर्न जोड़ें।
- उस भाषा में नामस्थान समर्थन जोड़ें जिसमें यह नहीं है।
- बनाओ सी PHP की तरह लग रहे हो।
- हास्केल को पास्कल की तरह बनाएं।
- ... (टिप्पणी अनुभाग में विचारों को पोस्ट करने के लिए स्वतंत्र महसूस करें)
नियम:
- मेज पर कुछ लाओ। हास्केल में मेटाप्रोग्रामिंग सुविधाओं को जोड़ने के लिए सिर्फ "टेम्पलेट हास्केल" न कहें। यह StackOverflow नहीं है।
- संपूर्ण कार्यान्वयन एक स्क्रीनफुल (उदाहरण की गिनती नहीं) में फिट होना चाहिए।
- विशेष रूप से इस कार्य के लिए किसी बाहरी साइट पर कोड होस्ट न करें।
- सबसे प्रभावशाली या आश्चर्यजनक फीचर जीतता है।
100% सुविधा को सही तरीके से लागू करने की चिंता न करें। इससे दूर! मुख्य चुनौती यह पता लगाना है कि आप क्या करना चाहते हैं और शातिर तरीके से विवरण काट रहे हैं जब तक कि आपके नियोजित उपक्रम संभव नहीं हो जाते।
उदाहरण:
C प्रोग्रामिंग भाषा में एक लैम्ब्डा ऑपरेटर जोड़ें ।
प्रारंभिक दृष्टिकोण:
ठीक है, मुझे पता है कि मैं libgc का उपयोग करना चाहता हूं, इसलिए मेरा लंबोदर ऊपर और नीचे की फंगर समस्याओं को हल करेगा। मुझे लगता है कि पहली चीज जो मुझे करने की ज़रूरत है वह सी प्रोग्रामिंग भाषा के लिए एक पार्सर लिखना / खोजना है, फिर मुझे सी के प्रकार प्रणाली के बारे में सब सीखना होगा। मुझे यह पता लगाना होगा कि इसके प्रकार के बारे में कैसे जाना जाए। क्या मुझे टाइप इंट्रेंस लागू करने की आवश्यकता होगी, या क्या मुझे केवल औपचारिक पैरामीटर को दिए जाने की आवश्यकता होगी? CI में उन सभी पागल सुविधाओं के बारे में अभी तक क्या पता नहीं है?
यह स्पष्ट है कि सी में लंबोदर को सही ढंग से लागू करना एक बहुत बड़ा उपक्रम होगा। शुद्धता के बारे में भूल जाओ! सरलीकृत करें, सरल करें।
बेहतर:
पेंच ऊपर की ओर, जो उन्हें जरूरत है? मैं GNU C के नेस्टेड फ़ंक्शन और स्टेटमेंट एक्सप्रेशन के साथ कुछ मुश्किल कर सकता हूं । मैं सी, ट्रिक, हैकी कोड के साथ सी पर एक अद्भुत वाक्यात्मक परिवर्तन दिखाना चाहता था, लेकिन मुझे इसके लिए किसी पार्सर की भी आवश्यकता नहीं होगी। वह एक और दिन इंतजार कर सकता है।
परिणाम (जीसीसी की आवश्यकता है):
#include <stdio.h>
#include <stdlib.h>
#define lambda(d,e)({d;typeof(e)f(d){return(e);};f;})
#define map(F,A)({typeof(F)f=(F);typeof(*(A))*a=(A);({int i,l=((int*)(a))[-1]; \
typeof(f(*a))*r=(void*)((char*)malloc(sizeof(int)+l*sizeof(*r))+sizeof(int)); \
((int*)r)[-1]=l;for(i=0;i<l;i++)r[i]=f(a[i]);r;});})
#define convert_to(T) lambda(T x, x)
#define print(T, fmt) lambda(T x, printf(fmt "\n", x))
int main(void)
{
int *array = 1 + (int[]){10, 1,2,3,4,5,6,7,8,9,10};
map(print(int, "%d"), array);
double *array2 = map(lambda(int x, (double)x * 0.5), array);
map(print(double, "%.1f"), array2);
long *array3 = map(convert_to(long), array2);
map(print(long, "%ld"), array3);
long product = 1;
map(lambda(int x, product *= x), array);
printf("product: %ld\n", product);
return 0;
}
यह आसान था, है ना? मैं भी map
इसे उपयोगी और सुंदर बनाने के लिए एक मैक्रो में फेंक दिया ।