在Clojure中为单参数函数(如阶乘或斐波那契函数)执行Y组合器是有详细记录的:http://rosettacode.org/wiki/Y_combinator#Clojure
我的问题是-例如,对于像这个getter这样的双参数函数,如何做到这一点呢?
(这里的假设是我想递归地解决这个问题,这个非惯用的clojure代码是出于另一个原因而故意存在的)
非y-组合器版本
(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))发布于 2010-08-15 00:48:10
这将是非常直接的。
假设你有一个函数H:
(def H
(fn [x]
(fn [x y]
(stuff happens))))然后应用相同的ol‘Y-Combinator:
((Y H) 4 5)其中4和5是要传递给H的参数。
combinator本质上是“处理”H中的顶级函数,而不是做繁重工作的那个函数(这里的参数为2 )。
https://stackoverflow.com/questions/3483077
复制相似问题