首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Y-Combinator应用于Clojure中具有两个参数的递归函数?

将Y-Combinator应用于Clojure中具有两个参数的递归函数?
EN

Stack Overflow用户
提问于 2010-08-14 19:30:01
回答 1查看 484关注 0票数 5

在Clojure中为单参数函数(如阶乘或斐波那契函数)执行Y组合器是有详细记录的:http://rosettacode.org/wiki/Y_combinator#Clojure

我的问题是-例如,对于像这个getter这样的双参数函数,如何做到这一点呢?

(这里的假设是我想递归地解决这个问题,这个非惯用的clojure代码是出于另一个原因而故意存在的)

非y-组合器版本

代码语言:javascript
复制
(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))
EN

回答 1

Stack Overflow用户

发布于 2010-08-15 00:48:10

这将是非常直接的。

假设你有一个函数H:

代码语言:javascript
复制
(def H
  (fn [x] 
        (fn [x y]
              (stuff happens))))

然后应用相同的ol‘Y-Combinator:

代码语言:javascript
复制
((Y H) 4 5)

其中45是要传递给H的参数。

combinator本质上是“处理”H中的顶级函数,而不是做繁重工作的那个函数(这里的参数为2 )。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3483077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档