Clojure 从字符串生成符号并将其作为函数应用

Clojure 从字符串生成符号并将其作为函数应用,clojure,Clojure,我只是在学习clojure,我遇到了麻烦 我试图将算术表达式作为中缀字符串读取,并在Clojure中处理它 e、 g.“1+2”->(+12) 我读入“+”并将其转换为如下符号: (def plus (symbol "clojure.core" "+")) 它似乎工作正常,但当我调用它时,我没有得到我所期望的: user=> plus + user=> (plus 1 1) 1 user=> (plus 1 2) 2 user=> (plus 1 2 3) Arity

我只是在学习clojure,我遇到了麻烦

我试图将算术表达式作为中缀字符串读取,并在Clojure中处理它

e、 g.“1+2”->(+12)

我读入“+”并将其转换为如下符号:

(def plus (symbol "clojure.core" "+"))
它似乎工作正常,但当我调用它时,我没有得到我所期望的:

user=> plus
+

user=> (plus 1 1)
1
user=> (plus 1 2)
2
user=> (plus 1 2 3)
ArityException Wrong number of args (3) passed to: Symbol  clojure.lang.AFn.throwArity (AFn.java:437)

我在这里遗漏了什么?

您编写此类代码的原因是什么?如果您想让函数名为
plus
,它将是
+
同义词,只需编写
(def plus+)

Clojure
+
是正常功能。您可以像
(+123445)
一样使用它。没有理由把它变成符号

Clojure根本没有操作员。只有函数和宏

不过,如果您坚持使用
符号
,您需要像这样评估它

(def plus(eval(符号“clojure.core/+”))

看看
(符号“clojure.core/+”)
类和
+
本身

(类(符号“clojure.core/+”);;clojure.lang.Symbol

(class+);;clojure.core$\u PLUS


符号本身不能作为“在此符号下”的函数调用。如果您想“将符号转换为可调用函数”,您必须对其进行求值。

您编写此类代码的原因是什么?如果您想让函数名为
plus
,它将是
+
同义词,只需编写
(def plus+)

Clojure
+
是正常功能。您可以像
(+123445)
一样使用它。没有理由把它变成符号

Clojure根本没有操作员。只有函数和宏

不过,如果您坚持使用
符号
,您需要像这样评估它

(def plus(eval(符号“clojure.core/+”))

看看
(符号“clojure.core/+”)
类和
+
本身

(类(符号“clojure.core/+”);;clojure.lang.Symbol

(class+);;clojure.core$\u PLUS


符号本身不能作为“在此符号下”的函数调用。如果您想“将符号转换为可调用函数”,您必须对其进行求值。

您编写此类代码的原因是什么?如果您想让函数名为
plus
,它将是
+
同义词,只需编写
(def plus+)

Clojure
+
是正常功能。您可以像
(+123445)
一样使用它。没有理由把它变成符号

Clojure根本没有操作员。只有函数和宏

不过,如果您坚持使用
符号
,您需要像这样评估它

(def plus(eval(符号“clojure.core/+”))

看看
(符号“clojure.core/+”)
类和
+
本身

(类(符号“clojure.core/+”);;clojure.lang.Symbol

(class+);;clojure.core$\u PLUS


符号本身不能作为“在此符号下”的函数调用。如果您想“将符号转换为可调用函数”,您必须对其进行求值。

您编写此类代码的原因是什么?如果您想让函数名为
plus
,它将是
+
同义词,只需编写
(def plus+)

Clojure
+
是正常功能。您可以像
(+123445)
一样使用它。没有理由把它变成符号

Clojure根本没有操作员。只有函数和宏

不过,如果您坚持使用
符号
,您需要像这样评估它

(def plus(eval(符号“clojure.core/+”))

看看
(符号“clojure.core/+”)
类和
+
本身

(类(符号“clojure.core/+”);;clojure.lang.Symbol

(class+);;clojure.core$\u PLUS


符号本身不能作为“在此符号下”的函数调用。如果您想“将符号转换为可调用函数”,您必须对其进行求值。

默认情况下,符号会附加一个函数。默认情况下附加到它们的功能是在地图中查找此键。这就是你的加号行为异常的原因。它正在尝试查找地图中的元素

(加上11)
这实际上是在地图1中查找符号+并返回默认值1

(加上12)
除默认值为2外,与上述相同


默认情况下,符号具有附加的功能。默认情况下附加到它们的功能是在地图中查找此键。这就是你的加号行为异常的原因。它正在尝试查找地图中的元素

(加上11)
这实际上是在地图1中查找符号+并返回默认值1

(加上12)
除默认值为2外,与上述相同


默认情况下,符号具有附加的功能。默认情况下附加到它们的功能是在地图中查找此键。这就是你的加号行为异常的原因。它正在尝试查找地图中的元素

(加上11)
这实际上是在地图1中查找符号+并返回默认值1

(加上12)
除默认值为2外,与上述相同


默认情况下,符号具有附加的功能。默认情况下附加到它们的功能是在地图中查找此键。这就是你的加号行为异常的原因。它正在尝试查找地图中的元素

(加上11)
这实际上是在地图1中查找符号+并返回默认值1

(加上12)
除默认值为2外,与上述相同


@yonki原因是“+”是原始表达式中的字符串。这只是为了更好地学习这门语言的练习。重点不是把东西加在一起,