Calico Scheme in Python

Doug Blank doug.blank at gmail.com
Mon Apr 14 05:52:34 CEST 2014


We are writing to let you know of a recent spin-off from our Scheme
implementation work: we now have a version implemented in Python. This is a
full Scheme with proper tail-call recursion handling written in Python.

We also added some interesting Python-Scheme interactions:

* Scheme can use Python functions and libraries
* You can define Scheme functions for use in Python
* Python's list class serves the role for Scheme's vector class

Some sample uses:

You can just use calicoscheme.py as a script in Python, IronPython, or
Jython:

$ python calicoscheme.py
Calico Scheme, version 3.0.0
----------------------------
Use (exit) to exit
==> (+ 1 1)
2

This environment has access to Python's built-ins through
calicoscheme.ENVIRONMENT:

==> (sum '(1 2 3))

sum is found in the Python environment.

You can also import and use Python libraries directly:

==> (using "math" "numpy")
(math numpy)
==> (math.sin 3.14)
0.0015926529164868282
==> (numpy.array 10)
array(100)
==> (exit) # or control+d

You can also use calicoscheme inside Python:

$ python
>>> import calicoscheme
>>> calicoscheme.ENVIRONMENT = globals()    # set the environment to the
locals here
>>> calicoscheme.start_rm()
==> (+ 1 1)
2
==> (define! f (lambda (n) (+ n 1)))     ### define! puts it in the
external env
==> (exit)
goodbye

And back in Python you can call the define! function using Scheme's
infrastructure:

>>> f(100)
101

You can also call into Scheme like so:

>>> calicoscheme.execute_string_rm("(define x 23)")
<void>
>>> calicoscheme.execute_string_rm("x")
23

To download and get more information, please see:

http://calicoproject.org/Calico_Scheme


More information about the Python-announce-list mailing list