From 0412770ce064ea7fe0f9b6d55667c72609c6464f Mon Sep 17 00:00:00 2001 From: zaoqi Date: Sun, 5 Aug 2018 17:03:31 +0800 Subject: [PATCH] lambda --- >require | 10 +++++++--- example-lambda.c | 8 ++++++++ module< | 10 +++++++--- prelude.h | 10 +++++++--- require< | 10 +++++++--- 5 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 example-lambda.c diff --git a/>require b/>require index 23a6df8..924c44c 100644 --- a/>require +++ b/>require @@ -609,8 +609,9 @@ _HELPER_prelude_staticDefine_inlineDefine_ void make_void(){} #define _HELPER_prelude_if_then_else_A_(b) (b): _HELPER_prelude_if_then_else_B_ #define _HELPER_prelude_if_then_else_B_(b) (b)) -#define _HELPER_prelude_function_(value) {return (value);} -#define _HELPER_prelude_ignore_(x) _HELPER_prelude_global_nothing_ +/*例 lambda(int, int x, int y)({x+y;}) */ +#define lambda(return_type, ...) ({return_type _TEMP_prelude_lambda_(__VA_ARGS__) _HELPER_prelude_lambda_ +#define _HELPER_prelude_lambda_(value) {return (value);}_TEMP_prelude_lambda_;}) /*参考https://blog.csdn.net/u011787119/article/details/53815950*/ #define _HELPER_prelude_ATTR_(args) args @@ -629,6 +630,9 @@ _HELPER_prelude_staticDefine_inlineDefine_ void make_void(){} (__VA_ARGS__)) #define declare_public(t, n) extern t n +#define _HELPER_prelude_function_(value) {return (value);} +#define _HELPER_prelude_ignore_(x) _HELPER_prelude_global_nothing_ + #endif//_HEAD_prelude_static_ @@ -651,7 +655,7 @@ _HELPER_prelude_staticDefine_inlineDefine_ void make_void(){} # define _HELPER_prelude_define_public2(t, n) declare_public(t, n);t n #endif -/*例子 +/*例 define_private_function(int add(int x, int y))({ x+y; });*/ diff --git a/example-lambda.c b/example-lambda.c new file mode 100644 index 0000000..34a6e4d --- /dev/null +++ b/example-lambda.c @@ -0,0 +1,8 @@ +#include "module<" +#include "stdio.h" +define_public_function(int main())({ + int (*f)(int)=lambda(int, int x)(x+1); + printf("%d", f(1)); + 0; +}) +#include ">module" diff --git a/module< b/module< index e168d80..e508945 100644 --- a/module< +++ b/module< @@ -88,8 +88,9 @@ _HELPER_prelude_staticDefine_inlineDefine_ void make_void(){} #define _HELPER_prelude_if_then_else_A_(b) (b): _HELPER_prelude_if_then_else_B_ #define _HELPER_prelude_if_then_else_B_(b) (b)) -#define _HELPER_prelude_function_(value) {return (value);} -#define _HELPER_prelude_ignore_(x) _HELPER_prelude_global_nothing_ +/*例 lambda(int, int x, int y)({x+y;}) */ +#define lambda(return_type, ...) ({return_type _TEMP_prelude_lambda_(__VA_ARGS__) _HELPER_prelude_lambda_ +#define _HELPER_prelude_lambda_(value) {return (value);}_TEMP_prelude_lambda_;}) /*参考https://blog.csdn.net/u011787119/article/details/53815950*/ #define _HELPER_prelude_ATTR_(args) args @@ -108,6 +109,9 @@ _HELPER_prelude_staticDefine_inlineDefine_ void make_void(){} (__VA_ARGS__)) #define declare_public(t, n) extern t n +#define _HELPER_prelude_function_(value) {return (value);} +#define _HELPER_prelude_ignore_(x) _HELPER_prelude_global_nothing_ + #endif//_HEAD_prelude_static_ @@ -130,7 +134,7 @@ _HELPER_prelude_staticDefine_inlineDefine_ void make_void(){} # define _HELPER_prelude_define_public2(t, n) declare_public(t, n);t n #endif -/*例子 +/*例 define_private_function(int add(int x, int y))({ x+y; });*/ diff --git a/prelude.h b/prelude.h index 2ed4418..d82ab29 100644 --- a/prelude.h +++ b/prelude.h @@ -87,8 +87,9 @@ _HELPER_prelude_staticDefine_inlineDefine_ void make_void(){} #define _HELPER_prelude_if_then_else_A_(b) (b): _HELPER_prelude_if_then_else_B_ #define _HELPER_prelude_if_then_else_B_(b) (b)) -#define _HELPER_prelude_function_(value) {return (value);} -#define _HELPER_prelude_ignore_(x) _HELPER_prelude_global_nothing_ +/*例 lambda(int, int x, int y)({x+y;}) */ +#define lambda(return_type, ...) ({return_type _TEMP_prelude_lambda_(__VA_ARGS__) _HELPER_prelude_lambda_ +#define _HELPER_prelude_lambda_(value) {return (value);}_TEMP_prelude_lambda_;}) /*参考https://blog.csdn.net/u011787119/article/details/53815950*/ #define _HELPER_prelude_ATTR_(args) args @@ -107,6 +108,9 @@ _HELPER_prelude_staticDefine_inlineDefine_ void make_void(){} (__VA_ARGS__)) #define declare_public(t, n) extern t n +#define _HELPER_prelude_function_(value) {return (value);} +#define _HELPER_prelude_ignore_(x) _HELPER_prelude_global_nothing_ + #endif//_HEAD_prelude_static_ @@ -129,7 +133,7 @@ _HELPER_prelude_staticDefine_inlineDefine_ void make_void(){} # define _HELPER_prelude_define_public2(t, n) declare_public(t, n);t n #endif -/*例子 +/*例 define_private_function(int add(int x, int y))({ x+y; });*/ diff --git a/require< b/require< index 6e75b55..a91aa0f 100644 --- a/require< +++ b/require< @@ -605,8 +605,9 @@ _HELPER_prelude_staticDefine_inlineDefine_ void make_void(){} #define _HELPER_prelude_if_then_else_A_(b) (b): _HELPER_prelude_if_then_else_B_ #define _HELPER_prelude_if_then_else_B_(b) (b)) -#define _HELPER_prelude_function_(value) {return (value);} -#define _HELPER_prelude_ignore_(x) _HELPER_prelude_global_nothing_ +/*例 lambda(int, int x, int y)({x+y;}) */ +#define lambda(return_type, ...) ({return_type _TEMP_prelude_lambda_(__VA_ARGS__) _HELPER_prelude_lambda_ +#define _HELPER_prelude_lambda_(value) {return (value);}_TEMP_prelude_lambda_;}) /*参考https://blog.csdn.net/u011787119/article/details/53815950*/ #define _HELPER_prelude_ATTR_(args) args @@ -625,6 +626,9 @@ _HELPER_prelude_staticDefine_inlineDefine_ void make_void(){} (__VA_ARGS__)) #define declare_public(t, n) extern t n +#define _HELPER_prelude_function_(value) {return (value);} +#define _HELPER_prelude_ignore_(x) _HELPER_prelude_global_nothing_ + #endif//_HEAD_prelude_static_ @@ -647,7 +651,7 @@ _HELPER_prelude_staticDefine_inlineDefine_ void make_void(){} # define _HELPER_prelude_define_public2(t, n) declare_public(t, n);t n #endif -/*例子 +/*例 define_private_function(int add(int x, int y))({ x+y; });*/