将列表分解为参数的方法?

时间:2013-01-23 15:57:02

标签: scheme

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

如果我想将此列表用作lcm之类的函数的参数,该函数采用多个参数而不是单个列表,例如(lcm 1 2 3 4 5 6 7 8 9 10)是否有办法执行此操作?

3 个答案:

答案 0 :(得分:4)

使用apply:例如

(apply lcm (upto 1 10))

"应用"将函数应用于参数列表。

答案 1 :(得分:0)

我发现使用eval执行此操作的一种方法如下:

(eval(cons'lcm(up to 1 10)))

答案 2 :(得分: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)

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

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

(define (list . args)
 args)