Clojure 这里有哪些论点?

Clojure 这里有哪些论点?,clojure,Clojure,我是clojure的新手。 我有这个 (defn max-val [x & xs] (reduce #(if (< %1 %2) %2 %1) (flatten (cons x xs)))) 将返回一个lazy seq,只对#()函数作一个参数 (减少f coll)(减少f val coll) f应该是2个参数的函数。如果未提供val, 返回将f应用于coll中前两项的结果,然后 将f应用于该结果和第三项,等等。如果coll不包含 项,f也必须不接受任何参数,并减少返回值 不

我是clojure的新手。 我有这个

(defn max-val [x & xs]
  (reduce #(if (< %1 %2) %2 %1) (flatten (cons x xs))))
将返回一个lazy seq,只对#()函数作一个参数

(减少f coll)(减少f val coll)

f应该是2个参数的函数。如果未提供val, 返回将f应用于coll中前两项的结果,然后 将f应用于该结果和第三项,等等。如果coll不包含 项,f也必须不接受任何参数,并减少返回值 不带参数调用f的结果。如果coll只有1项,则它 返回,而不调用f。如果提供了val,则返回 将f应用于val和coll中的第一项的结果,然后 将f应用于该结果和第二项,如果coll不包含 项,返回val,不调用f

因此,它将函数应用于列表中的下一项,以及上一次调用的结果(第一次使用列表中的前两项)

假设您这样调用函数:

(reduce #(if (< %1 %2) %2 %1) '(1 2 3 4))
(减少#(如果(<%1%2)%2%1)(1234))
首先用
1
2
调用它,返回
2
。然后调用它,结果为
2
,下一项为
3
,并返回
3
。然后用结果调用它,
3
,然后调用下一项
4
,并返回
4
,作为最终结果

每一步都使用上一次调用的结果作为下一次调用的第一个参数。

让我们看看是否
reduce

(减少f coll)(减少f val coll)

f应该是2个参数的函数。如果未提供val, 返回将f应用于coll中前两项的结果,然后 将f应用于该结果和第三项,等等。如果coll不包含 项,f也必须不接受任何参数,并减少返回值 不带参数调用f的结果。如果coll只有1项,则它 返回,而不调用f。如果提供了val,则返回 将f应用于val和coll中的第一项的结果,然后 将f应用于该结果和第二项,如果coll不包含 项,返回val,不调用f

因此,它将函数应用于列表中的下一项,以及上一次调用的结果(第一次使用列表中的前两项)

假设您这样调用函数:

(reduce #(if (< %1 %2) %2 %1) '(1 2 3 4))
(减少#(如果(<%1%2)%2%1)(1234))
首先用
1
2
调用它,返回
2
。然后调用它,结果为
2
,下一项为
3
,并返回
3
。然后用结果调用它,
3
,然后调用下一项
4
,并返回
4
,作为最终结果


每一步都使用上一次调用的结果作为下一次调用的第一个参数。

您是否在询问如何使用reduce?或者您正在询问如何使用#(…%…%1…%n…)语法构建匿名函数?
(cons1 2 3)
根本不返回惰性seq:为
cons
提供两个以上的参数是错误的,或者第二个参数不是顺序的。您是否询问如何使用reduce?或者您正在询问如何使用#(…%…%1…%n…)语法构建匿名函数?
(cons123)
根本不返回惰性seq:为
cons
提供两个以上的参数是错误的,或者第二个参数不是顺序的。