这可能是一个简单的问题,但我似乎无法弄明白。
在下面的示例中,我想创建一个递归创建项列表的函数list-of-obj
。
示例:
> (list-of-obj 'a 5)
'(a a a a a)
代码:
#lang racket
(define (list-of-obj obj n)
(letrec ((helper
(lambda (obj n result)
(if (> n 0)
(helper obj (- n 1) (cons obj result))
result))))
helper obj n 0))
然而,这导致0
的输出。有什么指针吗?我是球拍/计划的新手。
答案 0 :(得分:5)
Racket中最惯用的解决方案是:
(make-list 5 'a)
=> '(a a a a a)
也就是说,如果内置功能可以满足您的需求,则不应重新发明轮子。但如果你需要从头开始编写,这应该可以解决问题:
(define (list-of-obj obj n)
(letrec ((helper
(lambda (obj n result)
(if (> n 0)
(helper obj (- n 1) (cons obj result))
result))))
(helper obj n '())))
您的代码存在两个问题:
helper
的调用必须由()
包围,因为这就是您调用Scheme中的过程的方式。0
。