因此,在Scheme中,如果我将列表作为参数,我将如何以相同顺序对其自身求值?
我只想写:(定义(功能列表)(列表)
我不太了解。
如果您有一个列表和一个“求值”该列表元素的函数,并且您要构造另一个列表,这是在列表的每个元素上调用该函数的结果,那么您正在做的事情称为mapping the列表中的函数,然后函数将其称为map
。给出以下两个定义:
(define course-names '((1 "Exploding buckets 101")
(2 "Squirrel cooking 201")
(4 "Flamethrower maintenance 211")))
(define (course->name c)
(let ((found (assq c course-names)))
(if found (second found) "UNKNOWN SECRET COURSE")))
然后
> (map course->name '(1 2 3 4))
'("Exploding buckets 101"
"Squirrel cooking 201"
"UNKNOWN SECRET COURSE"
"Flamethrower maintenance 211")
值得一看的是如何编写像map
这样的东西:这是一种方法:
(define (simple-map f l)
(define (simple-map-loop tail accum)
(if (null? tail)
(reverse accum)
(simple-map-loop (rest tail) (cons (f (first tail)) accum))))
(simple-map-loop l '()))
您的问题缺少示例。
这是您想要的吗?
(define (f . args)
args)
可以这样使用:
> (f 1 2 3)
(1 2 3)