Files
example-code-2e/02-array-seq/lispy
2021-06-29 12:21:27 -03:00
..
2021-06-29 12:21:27 -03:00
2021-06-29 12:21:27 -03:00
2021-06-29 12:21:27 -03:00
2021-06-29 12:21:27 -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 all 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 all those expressions in order, returning 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