Mic*_*ski 1 lisp lambda scheme racket
这可能是一个简单的问题,但我似乎无法弄明白.在下面的示例中,我想创建一个list-of-obj递归创建项列表的函数.
例:
> (list-of-obj 'a 5)
'(a a a a a)
Run Code Online (Sandbox Code Playgroud)
代码:
#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))
Run Code Online (Sandbox Code Playgroud)
然而,这导致输出0.有什么指针吗?我是球拍/计划的新手.
Racket中最惯用的解决方案是:
(make-list 5 'a)
=> '(a a a a a)
Run Code Online (Sandbox Code Playgroud)
也就是说,如果内置函数执行您想要的操作,则不应重新发明轮子.但如果你需要从头开始编写,这应该可以解决问题:
(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 '())))
Run Code Online (Sandbox Code Playgroud)
您的代码存在两个问题:
helper必须被包围(),因为这就是你如何调用Scheme中的过程.0像你一样.| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |