【发布时间】:2011-03-29 19:48:21
【问题描述】:
在 Clojure 中为单个参数函数(例如阶乘或斐波那契)执行 Y-Combinator 有很好的记录: http://rosettacode.org/wiki/Y_combinator#Clojure
我的问题是 - 例如,对于像这个 getter 这样的两个参数函数,你如何做到这一点?
(这里假设我想递归解决这个问题,而这个非惯用的 clojure 代码是出于另一个原因而故意存在的)
[非 y-combinator 版本]
(defn get_ [n lat]
(cond
(empty? lat) ()
(= 0 (- n 1)) (first lat)
true (get_ (- n 1) (rest lat))))
(get_ 3 '(a b c d e f g h i j))
【问题讨论】:
-
(= 0 (- n 1))确实是一种精巧的表达方式(= n 1)。顺便问一下,为什么第四行和第五行的缩进比第三行多? -
有什么特别的理由让这个getter基于1吗?
标签: recursion clojure lisp y-combinator