Skip to main content

Features

  • A tiny Lisp dialect, easy to integrate into other Python projects.

  • Includes an interactive Lisp interpreter.

  • Expression introspection specifically designed for use in genetic programming.

Introduction

pyLisp-NG is an immediate descendant of PyLisp, which had its accidental birth as a result of William Annis’ desire to build a CLIPS-like [1] syntax for a simple expert system intended for the monitoring tool, Mom. As a result of Lisp interest on the Python news group [2], William released the software and announced it to the group [3].

Several years later, the Evolver [4] and txEvolver [5] projects needed a functional programming language implementation in Python, as inspecting Python’s AST was too much of a hassle. The author wanted to distribute, process, and manage evolutionary algorithms/programs across multiple remote Twisted servers, and manipulating permutations of partial programs was much easier to integrate with Twisted if the programs themselves could be evaluated and introspected easily with Python.

pyLisp-NG inherits PyLisp’s idiosyncratic charaateristics. For example, the booleans are true and false and it doesn’t follow the convention that everything that isn’t false is true (common to many Lisps). In fact, all booleans in pyLisp-NG are based on fuzzy logic, so you can do trickier things. Macros are, quite strangely, first class objects in PyLisp which maybe novel to Lisps [6]:

lisp> (setq foo 22)
22
lisp> ((macro (x) `(setq ,x (+ ,x 1))) foo)
23

pyLisp-NG, like its predecessor, has no intent of becomming a full-fledged, robust Lisp implementation. All progress is governed solely by the interest of contributing developers; right now, that’s strictly for use as a genetic programming tool.

Installation

pyLisp-NG is setuptools-friendly; you can install it with the following:

$ easy_install pyLisp-NG

You can also get the full source code from Launchpad:

$ bzr lp:pylisp-ng

The latter option greatly encouraged for interested users, as the repository contains extra files that are not included in the ditribution tarballs (such as the test runner and test utils).

Usage

To use the interpretter from a full checkout, do this:

$ cd <branch directory> $ ./bin/pylisp-ng

If you’ve installed with easy_install, and your Python scripts directory is in your PATH, all you’ll need to do is this:

$ pylisp-ng

At this point, you’ll be able to enter Lisp expressions:

lisp> ((lambda (x) (* x x)) 2)
4
lisp>

You can use the s-expression code from Python:

>>> from pylispng import lisp
>>> l = lisp.SExpression('((lambda (x) (* x x)) 2)')
>>> str(l)
'((lambda (x) (* x x)) 2)'
>>> l.eval()
4

Building an expression one symbol at a time or by adding chunks at a time:

>>> l = lisp.SExpression()
>>> l.append('+')
>>> l.append('3')
>>> l.append('5')
>>> l.append('(* 3 3)')
>>> str(l)
'(+ 3 5 (* 3 3))'

You can examine various properties of the s-expression:

>>> l.eval()
17
>>> l.getDepth()
2
>>> len(l)
4
>>> l.getSize()
2

Known Bugs

None currently known.

TODO

  • support testing .l files

  • support lisp interpreter tests in doctests?

  • add http://www.biostat.wisc.edu/~annis/creations/PyLisp/tests.txt to tests

  • split up monolithic lisp.py file into separate files

  • replace fragile interpreter that originally came with PyLisp with one based on the Python interpreter

    • graceful quit

    • command history

    • auto-completion

  • add support for getting expressions by index (and thus slicing as well)

  • add support for getting sub-expressions

Changes

From PyLisp 1.17 to 2.0.0 (pyLisp-NG)

  • Added introspection code that’s useful for genetic programming.

  • A couple small bug fixes and some code cleanup.

From PyLisp 0.0 to 1.17

There doesn’t seem to be any history from which to extract code changes between previous versions and 1.17.

References

Release files for pyLisp-NG 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyLisp-NG 2.0.0
File Size Uploaded
pyLisp-NG-2.0.0.tar.gz 21.8 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for pyLisp-NG 2.0.0
File Interpreter ABI Platform
pyLisp_NG-2.0.0-py2.5.egg Legacy Egg format - - Details
pyLisp_NG-2.0.0-py2.4.egg Legacy Egg format - - Details

Total release size: 128.5 kB

Release files / pyLisp-NG-2.0.0.tar.gz

Download URL pyLisp-NG-2.0.0.tar.gz
Size 21.8 kB
Tags Source
SHA-256 checksum
How to use checksums
d14dee540c78d2b2a21ccfe09b1e9bab86cd060451545946555eb2ccbf9735d5
BLAKE2b-256 checksum
How to use checksums
a28800b7100011f7fde00ad590dc6c6e64aa936a0d9b7152f97597c96f105f2e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / pyLisp_NG-2.0.0-py2.5.egg

Download URL pyLisp_NG-2.0.0-py2.5.egg
Size 53.0 kB
Tags Egg
SHA-256 checksum
How to use checksums
36a063149df76a87098a3eaf139546498eaaa3b26835d276ba2d4086de1408ff
BLAKE2b-256 checksum
How to use checksums
6eb6e5ec8588b86f7b0cdb172bc5287f22cb0ed3acef52da9806921e7b063046
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / pyLisp_NG-2.0.0-py2.4.egg

Download URL pyLisp_NG-2.0.0-py2.4.egg
Size 53.7 kB
Tags Egg
SHA-256 checksum
How to use checksums
f58d8381d666166c8f05105efad48e13c8605a8fc17338fd42cece84b7d91c15
BLAKE2b-256 checksum
How to use checksums
9115e2e3eba8a206b3db60c5a98daccfd0c30a14d0d9449bdc06ce24ce239c29
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

2.0.0 This release

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page