Skip to main content

Build Status Coverage Status PyPI

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 cons behavior can be changed and support for new collections can be added through the generic functions cons.core._car and cons.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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cons-0.3.0.tar.gz (21.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cons-0.3.0-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file cons-0.3.0.tar.gz.

File metadata

  • Download URL: cons-0.3.0.tar.gz
  • Upload date:
  • Size: 21.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3

File hashes

Hashes for cons-0.3.0.tar.gz
Algorithm Hash digest
SHA256 6a8e9bb4ed715fe701b8a03b2b93d3f8dfff4bd38944bf47b0a2230ef98efb1a
MD5 07ea17deaf9ec085f6e23fe50ea58752
BLAKE2b-256 98a79971261a064bf47239c396477b4fe39ad4f6c622ff9b81fff7807f88b059

See more details on using hashes here.

File details

Details for the file cons-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: cons-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3

File hashes

Hashes for cons-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bd08cb4d7e2f6589238abcee7282a6b03d0686adfacc875b59242deb9e528ad7
MD5 3daa4389ad650fd8f0c1ca6c5f28eac4
BLAKE2b-256 73a5d402c4d155e9ae0400f96d84203c2057e8b8456f8358668850083b207786

See more details on using hashes here.

Release history Release notifications | RSS feed

0.4.7

2 files

0.4.6

1 file

0.4.5

1 file

0.4.4

1 file

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.1

2 files

This release

0.3.0 This release

2 files

0.2.9

2 files

0.2.8

2 files

0.2.6

1 file

0.2.5

1 file

0.2.0

2 files

0.1.3

2 files

0.1.2

2 files

0.1.0

2 files

0.0.1

3 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page