Scheme interpreter in Python
Project description
Lizpop is Scheme interpreter in Python.
Installation
Requirements:
Lizpop requires Python 2.5 or later, but does not work in Python3.
To install:
Simply run python setup.py install.
e.g.
$ tar zxvf lizpop-0.4.0.tar.gz $ cd lizpop-0.4.0 $ sudo python setup.py install
Usage
To run interactively:
$ python -O -m lizpop.run
To run a Scheme script in a file:
$ python -O -m lizpop.run yourfile.scm
For more info about command-line options:
$ python -O -m lizpop.run -h
Features
Subset of Scheme R5RS
See the Restrictions section for more details.
Has interfaces to Python
e.g.
$ cat helloworld.py def hello(s="world"): return u"Hello %s!" % s.capitalize() $ python -O -m lizpop.run > (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/FLAGS 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-- verboseExamples
;; A simple matching > (re-search #/(\d+):(\d+)/ "Aug 14") ;; not match #f > (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>") "<H3>Features:</H3>" >For more info, run help procedure.
e.g. > (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 ( http://brl.sourceforge.net/ ).
To run EML, use -eml as command line option.
e.g. python -m lizpop.run -eml yourfile.emlA 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 lizpop.run -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.
Usage:
(help var …)
(help-list regex-pattern)
e.g.
> (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).
- Note:
I’m not good at English. So help messages may include some errors or unnatural expressions in English.
Restrictions
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file lizpop-0.4.0.tar.gz
.
File metadata
- Download URL: lizpop-0.4.0.tar.gz
- Upload date:
- Size: 67.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 66cfed98d5b4bbc204e2fda20b3e988f002699355152542e9613a7fd8d8baf82 |
|
MD5 | 99108d2a04cefdf67ab6ad5603810c8d |
|
BLAKE2b-256 | 13c4ab509b1052d3e50b31b1ca64d565cc2cc34464bb776313d176ef0bf66ae7 |