方案列表作为参数

问题描述 投票:0回答:2

因此,在Scheme中,如果我将列表作为参数,我将如何以相同顺序对其自身求值?

我只想写:(定义(功能列表)(列表)

我不太了解。

list scheme racket
2个回答
0
投票

如果您有一个列表和一个“求值”该列表元素的函数,并且您要构造另一个列表,这是在列表的每个元素上调用该函数的结果,那么您正在做的事情称为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 '()))

0
投票

您的问题缺少示例。

这是您想要的吗?

(define (f . args) 
    args)

可以这样使用:

> (f 1 2 3)
(1 2 3)
© www.soinside.com 2019 - 2024. All rights reserved.