DeathKing
DeathKing

Reputation: 173

Can Scheme expand a list as arguments?

Considered that I have a procedure (plus x y) witch takes exactly two args. And now I also have a list which contains two objects like (list 1 2). So, if there's any magic way to expand the list as two arguments. We have a dot notion version, but that isn't what i want. I just want to expand the list to make Scheme believe I passed two arguments instead of a list.

Hope those Ruby codes help:

a = [1, 2]
def plus(x,y); x+y; end

plus(*a)
# See that a is an array and the plus method requires
# exactly two arguments, so we use a star operator to
# expand the a as arguments

Upvotes: 8

Views: 2039

Answers (2)

Óscar López
Óscar López

Reputation: 236124

This is Scheme's equivalent code:

(define (plus x y)
  (+ x y))

(plus 1 2)
=> 3

(define a (list 1 2))
(apply plus a)
 => 3

The "magic" way to expand the list and pass it as arguments to the procedure, is using apply. Read more about it your interpreter's documentation.

Upvotes: 6

Barmar
Barmar

Reputation: 782130

(apply your-procedure your-list)

Upvotes: 14

Related Questions