Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
656 views
in Technique[技术] by (71.8m points)

parameters - How do I pass a list as a list of arguments in racket?

I have a statement like this:

 ((lambda (a b c) (+ a b c)) 1 2 3) ; Gives 6

And I would like to be able to also pass it a list as so:

((lambda (a b c) (+ a b c)) (list 1 2 3))

...except this doesn't work because the entire list is passed as 'a.' Is there is a way to explode the list into arguments?

What I'm looking for is something similar to the * character in Python. For those of you unfamiliar with the syntax:

 def sumthree(a, b, c):
   print a + b + c

 sumthree(1, 2, 3) # Prints 6
 sumthree(*(1, 2, 3)) # Also prints 6
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

That operation is called apply.

(apply + (list 1 2 3))   ; => 6

apply "expands" the last argument; any previous arguments are passed as is. So these are all the same:

(apply + 1 2 3 (list 4 5 6))
(apply + (list 1 2 3 4 5 6))
(+ 1 2 3 4 5 6)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...