example-code-2e/18-with-match/lispy
2021-10-12 22:37:28 -03:00
..
original moved lispy from 02 to 18 2021-09-15 22:48:08 -03:00
py3.9 sync from Atlas 2021-10-12 22:37:28 -03:00
py3.10 sync from Atlas 2021-10-12 22:37:28 -03:00
LICENSE moved lispy from 02 to 18 2021-09-15 22:48:08 -03:00
README.md moved lispy from 02 to 18 2021-09-15 22:48:08 -03:00

Norvigs originals and updates

This directory contains:

  • original/: Norvigs lis.py, lispy.py, and the lispytest.py custom test script for testing both;
  • py3.10/: lis.py with type hints, pattern matching, and minor edits—requires Python 3.10.

The py3.10/ directory also has lis_test.py to run with pytest, including the lis_tests suite from original/lispytest.py, and additional separate tests for each expression and special form handled by evaluate.

lis.py is published in the norvig/pytudes repository on Github. The copyright holder is Peter Norvig and the code is licensed under the MIT license.

Changes to Norvigs code

I made small changes to the programs in original/:

  • In lis.py:
    • The Procedure class accepts a list of expressions as the body, and __call__ evaluates those expressions in order, and returns the value of the last. This is consistent with Schemes lambda syntax and provided a useful example for pattern matching.
    • In the elif block for 'lambda', I added the * in front of the *body variable in the tuple unpacking to capture the expressions as a list, before calling the Procedure constructor.
  • In lispy.py I made changes and a pull request to make it run on Python 3.

Luciano Ramalho
June 29, 2021