Macro lambda

Source
macro_rules! lambda {
    ($var:ident =  $($any:tt)*) => { ... };
    ({$($any0:tt)*}) => { ... };
    ({$($any0:tt)*},$($any1:tt)*) => { ... };
    ([$($any0:tt)*] [$($any1:tt)*] ) => { ... };
    (($($any1:tt)*) $($any2:tt)*) => { ... };
    ( $fun:tt $($var:ident)* , ( $($any1:tt)*) $($any2:tt)*  ) => { ... };
    ($var:ident $($any:tt)*) => { ... };
    ($fun0:tt $($var0:ident)* , $var:ident $($any:tt)*) => { ... };
    ({[,$($any0:tt)*]} $var00:ident $($var01:ident)*, $fun1:tt $($var1:ident)* $( , $fun2:tt $($var2:ident)* )*  $(; $( $fun3:tt $($var3:ident)*),*)*  ) => { ... };
    ({[$($any0:tt)*], ($($any1:tt)*) $($any2:tt)* } $var00:ident $($var01:ident)* , $fun1:tt $($var1:ident)*  $( , $fun2:tt $($var2:ident)* )*  $(; $( $fun3:tt $($var3:ident)*),*)* ) => { ... };
    ({[$($any0:tt)*], $fun1:tt $($var1:ident)* $( , $fun11:tt $($var11:ident)* )*  } $var00:ident $($var01:ident)* , $fun2:tt $($var2:ident)*  $( , $fun3:tt $($var3:ident)* )*  $(; $( $fun4:tt $($var4:ident)*),*)*  ) => { ... };
    ({$($any0:tt)*}$($var0:ident)* , $fun1:tt $($var1:ident)*  $( , $fun2:tt $($var2:ident)* )*  $(; $( $fun3:tt $($var3:ident)*),*)*  ) => { ... };
    ( $fun1:tt $($var1:ident)* ;  $fun2:tt $($var2:ident)* , () $($any:tt)*  ) => { ... };
    ( { $($any0:tt)*} ; {[$($any1:tt)*], ( ) $($any2:tt)* } $($any3:tt)*  ) => { ... };
    ($($any:tt)*) => { ... };
}
Expand description

基础语法 f1, f2, f3 依次运算 将f2作为参数传给f1,将f3传给第一次运算的结果 f1,(f2, f3)先计算 将f3作为参数传给f2,将第一次运算的结果传给 f1 {…}x y z 以空格分隔的标识符是函数的变量 x = … 将运算的最终结果赋值给x { … __ …} __ x y z , f 使用已经定义的常量时,将它作为第一个变量传入 其他的语法都是由lambda宏自己生成的,可以不使用