Skip to main content

Scheme interpreter in Python

Project description

Lizpop is Scheme interpreter in Python.



Lizpop requires Python 2.5 or later, but does not work in Python3.

To install:

Simply run python install.


$ tar zxvf lizpop-0.4.0.tar.gz
$ cd lizpop-0.4.0
$ sudo python install


To run interactively:

$ python -O -m

To run a Scheme script in a file:

$ python -O -m yourfile.scm

For more info about command-line options:

$ python -O -m -h


Subset of Scheme R5RS

See the Restrictions section for more details.

Has interfaces to Python


$ cat
def hello(s="world"):
  return u"Hello %s!" % s.capitalize()

$ python -O -m
> (define *helloworld* (import "helloworld"))
> (define hello (attr *helloworld* 'hello))
> (hello "friends")
"Hello Friends!"

For more details, See the IFPY.rst file in this package.

Regular Expression literal.

The following literal is a Regular Expression Object.

  PATTERN:   Regular expression pattern
  FLAGS:     Regular expression flags.
    i-- ignore case  m-- multi-line  s-- dot matches all
    u-- Unicode dependent  L-- locale dependent  x-- verbose


;; A simple matching
> (re-search #/(\d+):(\d+)/ "Aug 14")  ;; not match
> (re-search #/(\d+):(\d+)/ "Aug 14 08:30") ;; match
<_sre.SRE_Match object at ...>

;; Get subgroup
> (re-group (re-search #/(\d+):(\d+)/ "Aug 14 08:30") 1 2)
("08" "30")

;; Replace string
> (re-gsub #/<(\/?)h\d>/i "<\\1H3>" "<h1>Features:</h1>")

For more info, run help procedure.

> (help-list #/(^re-)|(regex)/)
> (help re-match re-search re-group re-gsub)

Supports multi-byte characters

Only utf-8 encoding now.

EML(EMbedded Lizpop)

EML is a template language for embedding Lizpop code in text file.

EML has the following simple specifications.

  • %>STRING<% is a new string literal, but escape sequences in STRING (such as \n and \u3055) are not decoded.

  • Implicitly, %> is added to the beginning of the input-port.

  • Implicitly, <% is added to the end of the input-port.

    Note: These ideas are inspired by BRL ( ).

To run EML, use -eml as command line option.

python -m -eml yourfile.eml

A simple example

$ cat gcdlcm.eml
<% (define numlist (map string->number *args*)) %>
GCD of <% numlist %> is <%(apply gcd numlist)%>.
LCM of <% numlist %> is <%(apply lcm numlist)%>.

$ python -m -eml gcdlcm.eml -- 1533 37303 4307
GCD of (1533 37303 4307) is 73.
LCM of (1533 37303 4307) is 6602631.

For more examples:

please run (help load-eml) to see its help message.

Note: `lizpop + apache2 + mod_wsgi`

See the wsgi_sample/application.wsgi file included in this package.

Help function

Lizpop has a help-function, it displays documentation for the given procedures or macros.


(help var …)

(help-list regex-pattern)


> (help invoke)
Procedure: (invoke OBJ MESSAGE ARGS ... )
  Invokes the OBJ's method named MESSAGE with ARGS ...

However, for now, the help documentation is provided only for the Python-Interface related functions.

For more info, run (help) and (help help-list).


I’m not good at English. So help messages may include some errors or unnatural expressions in English.


Hygienic macros are not supported.

define-syntax syntax-rules, and let-syntax are not implemented.

Instead, traditional(non-hygienic) macros can be used.

=> run (help define-macro)

Strings are not mutable.

Lizpop strings are implemented as Python unicode-string objects which are immutable. so, string-set! and string-fill! don’t work.

call/cc and dynamic-wind are only partially implemented.

Lizpop does not support full continuation.

Lizpop’s call-with-current-continuation is upward-only and non-reentrant. So, it can be used for non-local-exit, but cannot be used for co-routines or backtracking.

Complex numbers and Fractional numbers are not supported.

null-environment and scheme-report-environment are not implemented.

For more info, run (help eval).

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lizpop-0.4.0.tar.gz (67.0 kB view hashes)

Uploaded source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page