将多个方法应用于Clojure列表?

sig*_*int 4 clojure

我刚刚开始学习Clojure(我的第一个类似Lisp的语言),所以如果这个问题非常愚蠢,我很抱歉.

我想在列表中应用多个方法.到目前为止,我已经想到了

(defn sqr  [x] (* x x))
(def my-list '(4 7 9))
(map inc (map sqr (map dec my-list)))
;= (10 37 65)
Run Code Online (Sandbox Code Playgroud)

有没有更好的(更简洁/惯用)的方式来做到这一点?理想情况下,我想做点什么

(apply-multiple (dec sqr inc) my-list)
Run Code Online (Sandbox Code Playgroud)

...也将返回(10 37 65).

rig*_*old 8

只需使用功能组合:

(map (comp inc sqr dec) my-list)
Run Code Online (Sandbox Code Playgroud)

或者如果您希望以相反的顺序写下它们(如您的示例中所示):

(map #(-> % dec sqr inc) my-list)
Run Code Online (Sandbox Code Playgroud)

  • @sigint是的,这是函数组合的通常顺序,如数学符号(参见http://en.wikipedia.org/wiki/Function_composition).大多数功能语言,包括大多数lisps,都遵守此顺序.某些语言(特别是F#)通过提供两个不同的运算符为您提供选择. (2认同)