# Exotic Logics

pdpi pdpinheiro at gmail.com
Wed Jun 17 19:05:24 CEST 2009

```On Jun 17, 5:37 pm, Lie Ryan <lie.1... at gmail.com> wrote:
> Steven D'Aprano wrote:
> > On Tue, 16 Jun 2009 22:46:14 -0700, William Clifford wrote:
>
> >> I was staring at a logic table the other day, and I asked myself, "what
> >> if one wanted to play with exotic logics; how might one do it?"
>
> > This might be useful for you, and if not useful, at least it might blow
> > your mind like it did mine.
>
> > (This is not original to me -- I didn't create it. However, I can't find
> > the original source.)
>
> > Imagine for a moment that there are no boolean values.
> > There are no numbers.  They were never invented.
> > There are no classes.
> > There are no objects.
> > There are only functions.
>
> > Could you define functions that act like boolean values? And could you
> > define other functions to operate on them?
>
> > def true(x, y):
> >     return x
>
> > def false(x, y):
> >     return y
>
> > def print_bool(b):
> >     print b("true", "false")
>
> String isn't considered object?
>
> Also, b/true()/false() is a function object, isn't it? Unless function
> is first-class, you can't pass them around like that, since you need a
> function pointer (a.k.a number); but if function is first-class then
> there it is an object.

What Steven was doing was implementing some of the more basic stuff
from Lambda calculus in python. If you're implementing a different
system in an existing language, you'll need to use _some_ facilities
of the original language to interface with the outside world. Anyway,
here's a sample interactive session I just tried:

>>> def a(stuff):
...     print stuff
...
>>> def b(stuff):
...  stuff("abc")
...
>>> b(a)
abc

functions are first-class citizens in python.

```