Python cons
An implementation of cons in Python.
Usage and Design
The cons package attempts to emulate the semantics of Lisp/Scheme's cons as closely as possible while incorporating all the built-in Python sequence types:
>>> from cons import cons, car, cdr
>>> cons(1, [])
[1]
>>> cons(1, ())
(1,)
>>> cons(1, [2, 3])
[1, 2, 3]
In general, cons is designed to work with collections.abc.Sequence types.
According to the cons package, None corresponds to the empty built-in list, as nil does in some Lisps:
>>> cons(1, None)
[1]
The cons package follows Scheme-like semantics for empty sequences:
>>> car([])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ConsError: Not a cons pair
>>> cdr([])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ConsError: Not a cons pair
By default, str types are not considered cons-pairs, although they are sequences:
>>> cons("a", "string")
ConsPair('a' 'a string')
This setting can be overridden and other types can be similarly excluded from consideration by registering classes with the abc-based classes MaybeCons and NonCons.
Features
- Built-in support for the standard Python ordered sequence types: i.e.
list,tuple,Iterator,OrderedDict.
>>> from collections import OrderedDict
>>> cons(('a', 1), OrderedDict())
OrderedDict([('a', 1)])
- Existing
consbehavior can be changed and support for new collections can be added through the generic functionscons.core._carandcons.core._cdr. - Built-in support for
unification.
>>> from unification import unify, reify, var
>>> unify([1, 2], cons(var('car'), var('cdr')), {})
{~car: 1, ~cdr: [2]}
>>> reify(cons(1, var('cdr')), {var('cdr'): [2, 3]})
[1, 2, 3]
>>> reify(cons(1, var('cdr')), {var('cdr'): None})
[1]
Installation
pip install cons
Development
First obtain the project source:
git clone git@github.com:pythological/python-cons.git
Create a virtual environment and install the development dependencies:
$ pip install -r requirements.txt
Set up pre-commit hooks:
$ pre-commit install --install-hooks
Release files for cons 0.4.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cons-0.4.7.tar.gz | 8.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cons-0.4.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.3 kB
Release files / cons-0.4.7.tar.gz
| Download URL | cons-0.4.7.tar.gz |
|---|---|
| Size | 8.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0a96cd2abd6a9f494816c1272cf5583a960041750c2d7a48eeeccd47ce369dfd
|
|
BLAKE2b-256 checksum How to use checksums |
ae200eca1dcdbac64a570e60df66119847f94cdd513178d9c222c15101ca1022
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / cons-0.4.7-py3-none-any.whl
| Download URL | cons-0.4.7-py3-none-any.whl |
|---|---|
| Size | 8.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e38ee12cf703559ea744c94f725bee0e2329f32daf0249b49db1b0437cc6cb94
|
|
BLAKE2b-256 checksum How to use checksums |
a59fbffa3362895e5437d9d12e3bbd242f86d91af1d7cd26f6e14ebb6376581b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|