[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

# The defintion of TRUE and FALSE in Scheme.

```I've been wanting to replace the usual LISP definitions of TRUE and
FALSE by functions because that seems more in the spirit of Scheme.
Furthermore, with functions we can eliminate ``if'' and ``cond'' from
the essential syntax of Scheme which simplifies the analysis of
extensions to Scheme such as Zabih, McAllester, and Chapman's
non-deterministic operator, ``amb''.  I would like to get the Scheme
community's reaction to the specification of particular objects for
TRUE and FALSE, namely the functions:

(define true (lambda (iftrue iffalse) iftrue))
(define false (lambda (iftrue iffalse) iffalse))

Naturally, the constants #t and #f would always denote the appropriate
one of these two functions.

Given the above definitions for TRUE and FALSE, ``if'' statements can
be replaced according to the following pattern:

(if predicate iftrue iffalse) =>
((predicate (lambda () iftrue) (lambda () iffalse)))

And ``cond'' may be replaced thus:

(cond (predicate1 body1)
(predicate2 body2)
(predicate3 body3)
(else bodyelse))

becomes:

((predicate1
(lambda () body1)
(lambda ()
((predicate2
(lambda () body2)
(lambda ()
((predicate3
(lambda () body3)
(lambda () bodyelse)))))))))

The logical connectives ``not'', ``and'', and ``or'' could be defined
as follows.

(not predicate) => (predicate false true)

(or predicate1 predicate2) => (predicate1 true predicate2)

(and predicate1 predicate2) => (predicate1 predicate2 false)

Naturally, the definitions for ``or'' and ``and'' can be extended to
handle a variable number of parameters.

Please tell me of any problems you see with such a definition.

--Mario O. Bourgoin
```