Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can Scheme expand a list as arguments?

Tags:

lisp

scheme

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
like image 915
DeathKing Avatar asked Jun 11 '13 02:06

DeathKing


2 Answers

(apply your-procedure your-list)
like image 151
Barmar Avatar answered Nov 22 '22 13:11

Barmar


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.

like image 35
Óscar López Avatar answered Nov 22 '22 12:11

Óscar López