Ваша задача - привязать функцию к языку программирования, либо внедрив очень умную библиотеку, либо обработав вводимый текст и / или изменив процесс компиляции.
Идеи:
- Добавьте чередование презентаций в стиле PHP в C (например
<?c printf("Hello,"); ?> world!
). - Добавьте оператор объединения нулей в один из тех языков, которые не являются C #.
- Добавьте макросы в PHP.
- Добавить
goto
в JavaScript. - Добавить сопоставление с образцом для языка X.
- Добавить поддержку пространства имен для языка, в котором его нет.
- Сделать C похожим на PHP.
- Сделай так, чтобы Хаскелл выглядел как Паскаль.
- ... (не стесняйтесь публиковать идеи в разделе комментариев)
Правила:
- Принеси что-нибудь на стол. Не просто говорите "Template Haskell", чтобы добавить средства метапрограммирования в Haskell. Это не StackOverflow.
- Вся реализация должна умещаться в одном скрине (не считая примера).
- Не размещайте код на внешнем сайте специально для этой задачи.
- Наиболее впечатляющая или удивительная особенность побеждает.
Не беспокойтесь о правильной реализации этой функции. Отнюдь не! Основная задача - выяснить, что вы хотите сделать, и злобно вырезать детали, пока ваше запланированное начинание не станет возможным.
Пример:
Добавьте лямбда-оператор к языку программирования C.
Начальный подход:
Хорошо, я знаю, что хотел бы использовать libgc, чтобы мои лямбды решали проблемы funarg вверх и вниз. Я думаю, первое, что мне нужно сделать, это написать / найти синтаксический анализатор для языка программирования Си, а затем мне нужно узнать все о системе типов Си. Я должен был бы выяснить, как понять это, насколько типы идут. Должен ли я реализовать вывод типа или просто потребовать, чтобы формальный параметр был напечатан как заданный? Как насчет всех этих сумасшедших функций в CI, о которых я еще не знаю?
Совершенно очевидно, что правильная реализация лямбды в C была бы огромной задачей. Забудь о правильности! Упростите, упростите.
Лучше:
Вверните вверх funargs, кому они нужны? Я мог бы сделать что-то хитрое с вложенными функциями GNU C и выражениями операторов . Я хотел продемонстрировать удивительное синтаксическое преобразование на C с помощью краткого хакерского кода, но мне даже не понадобится парсер для этого. Это может подождать еще один день.
Результат (требуется GCC):
#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
макрос, чтобы сделать его полезным и красивым.