首先是Clojure并休息

Kob*_*son 4 symbols function clojure

为什么我得到2个不同的值

(apply (first '(+ 1 2)) (rest '(+ 1 2)))
> 2
Run Code Online (Sandbox Code Playgroud)

(apply + '(1 2))
> 3
Run Code Online (Sandbox Code Playgroud)

什么时候

(first '(+ 1 2)) 
> +
Run Code Online (Sandbox Code Playgroud)

(rest '(+ 1 2))
> (1 2)
Run Code Online (Sandbox Code Playgroud)

我尝试减少并获得相同的价值

(reduce (first '(+ 1 2)) (rest '(+ 1 2)))
> 2
Run Code Online (Sandbox Code Playgroud)

Chu*_*uck 8

你的麻烦在于你试图调用符号'+而不是函数+.当你调用一个符号时,它会尝试在第一个参数中查找符号(例如,如果{'a 1 '+ 5 'b 2}你已经得到它5).如果传递第二个参数,则返回该值,而不是nil在第一个参数中找不到该符号.因此,当您调用时('+ 1 2),它会尝试查找'+1并失败,因此返回2.

顺便说一下,这是用'(+ 1 2)和创建列表之间的区别(list + 1 2).前者创建符号+,1和2的列表.因为'1和1是相同的,所以没关系.但符号'+不是Var clojure.core/+,所以后者得到Var的值,而前者只得到符号.所以,如果你已经完成了(list + 1 2),你的本可以按照书面形式工作.