Subject: Re: passing formal arguments to scheme lambda functions?
From: (Rob Warnock)
Date: 2000/05/09
Newsgroups: comp.lang.scheme
Message-ID: <8f8vm9$8uuck$>
Lokesh Setia  <> wrote:
| Say, I have to implement a function in C for use with guile which has
| to return values through its parameters.

Not a good idea.

|    (c-func val1 val2 val3 'result1 'result2)
| The user passes some values in val1, val2, val3, and gets the answers
| in symbols result1 and result2.
| Of course, I could have designed the function such that the user will
| have to say:
| (set! result (c-func val1 val2 val3))
| (set! result1 (car result))
| (set! result2 (cdr result))

Dunno 'bout Guile, but C code called from MzScheme can return R5RS
multiple values, so the clean way is:

	  (lambda () (c-func val1 val2 val3))
	  (lambda (result1 result2)
	    ...code that uses results 1 & 2...

or at the top level:

	(define-values (result1 result2) (c-func val1 val2 val3))

or if you insist on doing a "set!":

	(set!-values (result1 result2) (c-func val1 val2 val3))


Rob Warnock, 41L-955
Applied Networking
Silicon Graphics, Inc.		Phone: 650-933-1673
1600 Amphitheatre Pkwy.		PP-ASEL-IA
Mountain View, CA  94043