什么';clojure中的#和%的名称是什么? < Culjule中的构造的名称是什么?在表达式中间的表达式一%的开始时,使用γ?比如说 #(fn [a b] (% b a))
我尝试在文档中搜索它,但由于定义它的两个字符都不是字母数字,因此我的搜索没有太成功。它是匿名函数声明的读取器宏。有关读卡器宏的全面列表,请参见 例如,什么';clojure中的#和%的名称是什么? < Culjule中的构造的名称是什么?在表达式中间的表达式一%的开始时,使用γ?比如说 #(fn [a b] (% b a)),clojure,Clojure,我尝试在文档中搜索它,但由于定义它的两个字符都不是字母数字,因此我的搜索没有太成功。它是匿名函数声明的读取器宏。有关读卡器宏的全面列表,请参见 例如,#(*5%)转换为(fn[x](*5x)) 您的示例在阅读阶段转换为(fn[op](fn[ab](op a b))(op是我选择的占位符。)它出现在(至少)两个地方: 在下面(但没有提到%1%2等) 在中(解析程序)——#通过表查找导致分派到读取器宏(您必须仔细查看,但这确实描述了%1等) 在这两种情况下,它都没有一个有用的名称(实际上,“Disp
#(*5%)
转换为(fn[x](*5x))
您的示例在阅读阶段转换为(fn[op](fn[ab](op a b))
(op
是我选择的占位符。)它出现在(至少)两个地方:
(fn[ab](+ab))
相当于#(++%1%2)
:
“#”应该是lambda字符,%表示预期的第一个参数。()结构是匿名函数定义的简写。%符号用作它所接受的参数的简写
%对于第一个参数,%多个参数的整数(即%1%2)。%对于封装在序列中的其余(未使用)参数
=> (#(println % %2 %3 %&) 1 2 3 4 5)
1 2 3 (4 5)
通过对其进行宏扩展,可以看到它创建了什么函数
#((\ %1 %2) * %2))
=> (macroexpand-1 '#((\ %1 %2) * %2))
(fn* [p1__744# p2__745#] ((\space p1__744# p2__745#) * p2__745#))
正常情况下,以下内容相同:
#((\ %1 %2) * %2))
(fn [p1 p2] ((\ p1 p2) * p2))
请注意,您的示例创建了一个匿名函数,其中包含一个新的匿名函数。%1和%2是否表示多个参数?%1和%2分别表示第一个和第二个参数。
#((\ %1 %2) * %2))
(fn [p1 p2] ((\ p1 p2) * p2))