macro_rules! lambda { ($var:ident = $($any:tt)*) => { ... }; ({$($any0:tt)*}) => { ... }; ({$($any0:tt)*},$($any1:tt)*) => { ... }; ([$($any0:tt)*] [$($any1:tt)*] [$($any2: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)*] $($any1:tt)* } $($var0:ident)* , {$($any2:tt)*} $( , $fun2:tt $($var2:ident)* )* $(; $( $fun3:tt $($var3:ident)*),*)* ) => { ... }; ({[,$($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)* ) => { ... }; ($($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宏自己生成的,可以不使用