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)
你的麻烦在于你试图调用符号'+而不是函数+.当你调用一个符号时,它会尝试在第一个参数中查找符号(例如,如果{'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),你的本可以按照书面形式工作.