Assume I have a procedure upto
that when called like (upto 1 10)
will generate the list '(1 2 3 4 5 6 7 8 9 10)
.
If I want to use this list as arguments to a function like lcm
that takes multiple arguments rather than a single list, like (lcm 1 2 3 4 5 6 7 8 9 10)
is there a way to do this?
Use apply: e.g
(apply lcm (upto 1 10))
"apply" applies a function to a list of arguments.
One way I found to do this using eval is the following:
(eval (cons 'lcm (upto 1 10)))
In MIT-Scheme (unsure of others) you can use the dot in your function definition.
(define (func-with-multiple-args . args)
(let loop ((args args))
(if (null? args)
'done
(begin (display (car args)) (loop (cdr args))))))
Calling with
(func-with-multiple-args 1 2 3 4)
will do the job. Note that the args get put into a list.
Fun fact: the `list' procedure is actually defined in list.scm of the MIT-Scheme "runtime" source as:
(define (list . args)
args)