Page 1 of 1
					
				Convert list to variable arguments?
				Posted: Wed Mar 12, 2008 1:15 am
				by Tim Johnson
				Let's suppose I have a function foo
Code: Select all
(define (foo)
    (doargs (i) (println i)))
and I can process it by something like this:
 
Now, suppose I have a list that looks like this:
Is there a method to pass 'lst to 'foo so that it is consumend
one item at a time by 'doargs?
Thanks
tim
 
			 
			
					
				
				Posted: Wed Mar 12, 2008 1:19 am
				by Jeff
				(cons foo lst)
			 
			
					
				
				Posted: Wed Mar 12, 2008 1:31 am
				by Lutz
				like this:
Code: Select all
> (apply foo lst)
a
b
c
x
e
f
g
g
> 
 
			 
			
					
				
				Posted: Wed Mar 12, 2008 1:33 am
				by Tim Johnson
				Jeff wrote:(cons foo lst)
Code: Select all
> (cons foo lst)
((lambda () 
  (doargs (i) 
   (println i))) a b c x e f g)
;; That doesn't evaluate 'foo with 'lst...
;; Or did I miss something?
Thanks
tim
 
			 
			
					
				
				Posted: Wed Mar 12, 2008 1:35 am
				by Lutz
				we posted together ;-) the answer again:
Code: Select all
> (apply foo lst)
a
b
c
x
e
f
g
g
> 
 
			 
			
					
				
				Posted: Wed Mar 12, 2008 1:37 am
				by Tim Johnson
				Lutz wrote:we posted together ;-) the answer again:
Code: Select all
> (apply foo lst)
a
b
c
x
e
f
g
g
> 
 
Yes! Thank you sir!
 
			 
			
					
				
				Posted: Wed Mar 12, 2008 1:44 am
				by Lutz
				Jeff just forgot to wrap an 'eval' around his answer, but there is a difference between both approaches:
This would give all nil's because a,b,c,d,e,f,g would be evaluated to their contents. It depends what you want, the contents of the symbols a to g or the symbols a to g themselves when using 'apply'.