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

时间:2014-03-27 13:30:21

标签: 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)

有更好的(更简洁/惯用)方式吗?理想情况下,我想做一些像

这样的事情
(apply-multiple (dec sqr inc) my-list)

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

1 个答案:

答案 0 :(得分:8)

只需使用功能组合:

(map (comp inc sqr dec) my-list)

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

(map #(-> % dec sqr inc) my-list)