C言語では、
GCC拡張で関数の中に関数を作れます。
CODE:
#include
int main(void) {
int add(int a, int b) {
return a + b;
}
printf("%d\n", add(12, 34));
return 0;
}
SchemeやHaskell, Pythonなどでも関数の中に関数を作れます。
CODE:
(define main (lambda ()
(define add (lambda (a b) (+ a b)))
(write (add 12 34)) (newline)
))
(main)
CODE:
main :: IO ()
main = let add a b = a + b -- いーたかんやく?いえ、知らない子ですね
in putStrLn $ show $ add 12 34
CODE:
def main(argv):
def add(a, b):
return a + b
print(str(add(12, 34)))
def target(*args):
return main, None
if __name__ == '__main__':
import sys
main(sys.argv)
C++でも関数の中に関数のコードを書いてみました。
CODE:
#include
int main(void) {
int add(int a,int b);
__asm__ __volatile__ (
"jmp 1f\n\t"
"Z3addii:\n\t"
"_Z3addii:\n\t"
"__Z3addii:\n\t"
"pop %ecx\n\t"
"pop %edx\n\t"
"pop %eax\n\t"
"push %eax\n\t"
"push %edx\n\t"
"push %ecx\n\t"
"add %edx, %eax\n\t"
"ret\n\t"
"1:\n\t"
);
printf("%d\n", add(12, 34));
return 0;
}
うーん、
Ideone.comや
codepadでは動くけど
Wandboxでは動かないし、コレジャナイ…。