这里有哪些参数?

问题描述:

我是一个真正的clojure新手。 我有这个这里有哪些参数?

(defn max-val [x & xs] 
    (reduce #(if (< %1 %2) %2 %1) (flatten (cons x xs)))) 

哪个是%1和%2参数? 据我所知,

(flatten (cons 1 2 3) 

将返回一个懒序列,使得只有一个参数的#()函数

+0

你问如何使用减少?或者你问如何使用#(...%...%1 ...%n ...)语法构建匿名函数? –

+0

'(cons 1 2 3)'根本不会返回一个懒惰的seq:给'cons'多于2个参数是错误的,或者第二个参数不是顺序的。 – amalloy

让我们来看看the docsreduce

(reduce f coll) (reduce f val coll)

˚F应该是2个参数的函数。如果未提供val,则 返回将结果应用于coll中的前2项,然后 将f应用于该结果和第3项等。如果coll不包含 项,则f必须不接受任何参数那么,并减少返回 结果调用f没有参数。如果coll只有1个项目,则返回 ,并且不调用f。如果提供了val,则返回将结果应用于val和coll中的第一项的 结果,然后 将f应用于该结果以及第二项等。如果coll不包含 项,则返回val和f不会被调用。

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

想象一下,你打电话给你的功能是这样的:

(reduce #(if (< %1 %2) %2 %1) '(1 2 3 4)) 

它将首先与12被调用,返回2。然后将调用结果2和下一个项目3,并返回3。然后调用结果3和下一个项目4,并返回4作为最终结果。

每一步都将先前调用的结果作为下一次的第一个参数。