2

假设我有一个过程upto,当调用 like 时(upto 1 10)会生成 list '(1 2 3 4 5 6 7 8 9 10)

如果我想将此列表用作像lcm 这样的函数的参数,该函数需要多个参数而不是单个列表,那么(lcm 1 2 3 4 5 6 7 8 9 10)有没有办法做到这一点?

4

3 回答 3

4

使用应用:例如

(apply lcm (upto 1 10))

“应用”将函数应用于参数列表。

于 2013-01-23T15:59:43.583 回答
0

我发现使用 eval 的一种方法如下:

(eval (cons 'lcm (upto 1 10)))

于 2013-01-23T16:02:08.283 回答
0

在 MIT-Scheme(不确定其他人)中,您可以在函数定义中使用点。

(define (func-with-multiple-args . args)
  (let loop ((args args))
    (if (null? args)
      'done
      (begin (display (car args)) (loop (cdr args))))))

打电话给

(func-with-multiple-args 1 2 3 4)

将完成这项工作。请注意,参数被放入列表中。

有趣的事实:“list”过程实际上在 MIT-Scheme“运行时”源的 list.scm 中定义为:

(define (list . args)
 args)
于 2013-01-23T20:23:41.580 回答