首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Clojure中消除尾部调用?

在Clojure中消除尾部调用?
EN

Stack Overflow用户
提问于 2010-02-02 12:16:21
回答 1查看 648关注 0票数 17

有人能把这个(plt) Scheme代码重写成Clojure吗?

代码语言:javascript
复制
(define (f n)
   (printf "(f ~a)~n" n)
   (g n))

(define (g n)
   (printf "(g ~a)~n" n)
   (h n))

(define (h n)
   (printf "(h ~a)~n" n)
   (f (+ n 1)))

以这种方式不将过程f、g和h一起折叠,并允许代码无限期运行而不会崩溃?

EN

回答 1

Stack Overflow用户

发布于 2010-02-02 12:46:27

使用跳床:

代码语言:javascript
复制
(declare f)

(defn h [n]
   (println "(h " n ")")
   #(f (+ n 1)))

(defn g [n]
   (println "(g " n ")")
   #(h n))

(defn f [n]
   (println "(f " n ")")
   #(g n))

从以下几点开始:

代码语言:javascript
复制
(trampoline f 0)

我已经让这段代码在我的pc后台运行了大约5个小时,内存使用率是持平的。

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

https://stackoverflow.com/questions/2181852

复制
相关文章

相似问题

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