Re: (apply and (list #t #f #t))

Clifford Beshers (beshers@cs.columbia.edu)
Thu, 30 Oct 1997 11:30:40 -0500 (EST)

Date: Thu, 30 Oct 1997 11:05:13 +0100
From: Sascha Ziemann <szi@aibon.ping.de>
X-Mailer: Mozilla 4.03 [en] (X11; I; Linux 2.0.30 i586)
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Sender: owner-guile@cygnus.com
Precedence: bulk
Content-Type: text/plain; charset=us-ascii
Content-Length: 76

Hi,

is it intended that this is not possible?

(apply and (list #t #f #t))

'and' is a syntactic form, not a function, and you can't apply a
syntactic form.

I've never understood quite why this was necessary, perhaps to
implement short-circuiting, but it really breaks the model.

I've skirted it in STk with this function:

(define (fand . args)
(eval `(and ,@args)))

and then I can do:

(apply fand '(#t #f #t))

but I've never liked this solution very much, since eval isn't
standard.

Avoiding evaluation of the arguments isn't an issue here, since the
list of arguments has already been constructed. So, now that I think
about this again, a list traversal routine would do just as well.