Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';clojure中的#和%的名称是什么? < Culjule中的构造的名称是什么?在表达式中间的表达式一%的开始时,使用γ?比如说 #(fn [a b] (% b a))_Clojure - Fatal编程技术网

什么';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
是我选择的占位符。)

它出现在(至少)两个地方:

  • 在下面(但没有提到%1%2等)

  • 在中(解析程序)——#通过表查找导致分派到读取器宏(您必须仔细查看,但这确实描述了%1等)

  • 在这两种情况下,它都没有一个有用的名称(实际上,“Dispatch”可以是隐含的名称-请参阅第二个链接)。更一般地说,“#”在其他事物中被称为“gato”(猫),原因不明

    (是的,%1%2是第一个和第二个参数,等等,%&是“rest”-第一个参数可以只使用%,请参见第二个链接)

    正如其他人所说,它是函数的简写。所以
    (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))