당신의 임무는 매우 영리한 라이브러리를 구현하거나 입력 텍스트를 처리하거나 컴파일 프로세스를 조정하여 기능을 프로그래밍 언어에 고정시키는 것입니다.
아이디어 :
- C에 인터리빙하는 PHP 스타일 프리젠 테이션을 추가하십시오 (예 :)
<?c printf("Hello,"); ?> world!
. - C #이 아닌 언어 중 하나에 null 통합 연산자 를 추가하십시오 .
- PHP에 매크로를 추가하십시오.
goto
JavaScript에 추가하십시오 .- 언어 X와 일치하는 패턴을 추가하십시오.
- 없는 언어에 네임 스페이스 지원을 추가하십시오.
- C를 PHP처럼 보이게 만듭니다.
- 하스켈을 파스칼처럼 보이게합니다.
- ... (의견 섹션에 아이디어를 자유롭게 게시하십시오)
규칙 :
- 테이블에 무언가를 가져옵니다. Haskell에 메타 프로그래밍 기능을 추가하기 위해 "템플릿 Haskell"이라고 말하지 마십시오. 이것은 StackOverflow가 아닙니다.
- 전체 구현은 하나의 스크린에 맞아야합니다 (예제를 세지 않음).
- 이 작업을 위해 외부 사이트에서 코드를 호스팅하지 마십시오.
- 가장 인상적이거나 놀라운 기능이 승리합니다.
기능을 100 % 올바르게 구현하는 것에 대해 걱정하지 마십시오. 그것과는 거리가 멀다! 주요 과제는 수행하려는 작업을 파악하고 계획된 사업이 실현 가능해질 때까지 세부 사항을 악의적으로 잘라내는 것 입니다.
예:
C 프로그래밍 언어에 람다 연산자 를 추가하십시오 .
초기 접근 방식 :
좋아, 나는 libgc 를 사용 하여 람다가 상향 및 하향 funarg 문제를 해결할 수 있다는 것을 알고있다 . 필자가해야 할 첫 번째 일은 C 프로그래밍 언어에 대한 파서를 작성 / 찾기하는 것이므로 C 유형 시스템에 대해 모두 알아야합니다. 유형에 따라 이해하는 방법을 알아야합니다. 형식 유추를 구현해야합니까, 아니면 공식 매개 변수를 주어진 그대로 입력해야합니까? 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
매크로를 유용하고 예쁘게 만들기 위해 던졌습니다 .