我不清楚Clojure ->和->>Clojure 之间的区别:从API参考来看,后者似乎是顺序应用多个函数的正确方法,即( - >> xhgf)会导致f(g(h) (x))).
这与Lisp类语言如何区分f(x,y)和(f(x))(y)有关,而Haskell则不正确?(使用数学符号;逗号旨在暗示n-ary函数,而不是tupling).
提前致谢!
我错了,除了像(def inc#(+ 1%))这样的简单函数之外,它们都没有工作.
下面是一个不工作的函数的例子->或者->>,
(defn mkinc [amnt] (fn [x] (+ x amnt)))
(-> 3 (mkinc 2))
; ERROR -- Wrong number of args (2) passed to: sandbox58780$fn--58797$mkinc
((mkinc 2) 3)
; 5
Run Code Online (Sandbox Code Playgroud)
Sid*_*ddy 21
->并且->>如果所有函数只接受一个参数,则相等.否则,->将作为第一个参数的thread作为函数->>传递给函数,并将其作为最后一个参数传递给函数.以下示例应明确说明:
(-> x
(f 1 2)
(g 3 4)
(h 5 6))
Run Code Online (Sandbox Code Playgroud)
变
(h (g (f x
1 2)
3 4)
5 6)
Run Code Online (Sandbox Code Playgroud)
要么 h(g(f(x, 1, 2), 3, 4), 5, 6)
(->> x
(f 1 2)
(g 3 4)
(h 5 6))
Run Code Online (Sandbox Code Playgroud)
变
(h 5 6
(g 3 4
(f 1 2 x)))
Run Code Online (Sandbox Code Playgroud)
要么 h(5, 6, g(3, 4, f(1, 2, x)))
编辑 :(响应问题中的编辑,从评论中复制此内容).
该示例不起作用,因为->宏将3作为第一个arg插入mkinc.见(macroexpand-1 '(-> 3 (mkinc 2)))明白这更好.
这确实有效:(-> 3 ((mkinc 2))).看看(macroexpand-1 '(-> 3 ((mkinc 2))))明白为什么.