【发布时间】:2011-10-06 03:17:05
【问题描述】:
我想在scheme中定义一个for-n函数,它有3个参数,start和stop是整数,fn是一个函数。我希望 for-n 函数先调用 fn,然后调用 start+1 ...,最后调用 stop。
我还想将 fn 返回的所有值存储在一个列表中。请帮助我开始。我是一位经验丰富的程序员,但刚刚开始学习计划。
这是我得到的函数定义:
[编辑]
(define (fn a)
a
)
(define (for-n start stop fn)
(cond
((> start stop) (quote ()))
((= start stop) (list(fn start)))
(else (list(for-n (+ start 1) stop fn)))
)
)
> (for-n 3 5 fn)
(list (list (list 5)))
当 (for-n 3 5 fn) 被调用时,我希望它返回 (3 4 5),我做错了什么?
[编辑-2]
感谢大家的帮助。我的功能现在可以工作了。这是我得到的:
(define (for-n start stop fn)
(cond
((> start stop) (quote ()))
((= start stop) (list(fn start)))
(else (cons (fn start) (for-n (+ start 1) stop fn)))
)
)
【问题讨论】:
-
尝试删除
(= start stop)大小写。你的测试还通过了吗? -
很高兴听到您成功了。您仍然应该删除
(= start stop)行;它使您的功能比需要的丑陋约 5 倍。 (如果这是作业,并且我是标记,我会因为有那条线而扣掉你的分数,因为它表明你没有得到递归™。) -
这不是java。不要像 java 那样格式化你的代码。
-
除了 Marcin 的评论:网上有一些不错的 Scheme/Common-Lisp 风格指南。参照。例如。 mumble.net/~campbell/scheme/style.txt 和 google-styleguide.googlecode.com/svn/trunk/lispguide.xml.
标签: functional-programming scheme