跳转到主要内容

Python中类似于Lisp/Scheme的cons实现。

项目描述

Build Status Coverage Status PyPI

Python cons

Python中cons的实现。

用法和设计

cons包试图尽可能精确地模拟Lisp/Scheme的cons的语义,同时结合所有内置的Python序列类型。

>>> from cons import cons, car, cdr
>>> cons(1, [])
[1]

>>> cons(1, ())
(1,)

>>> cons(1, [2, 3])
[1, 2, 3]

通常,cons设计用于与collections.abc.Sequence类型一起工作。

根据cons包的说明,None对应于内置的空list,就像某些Lisp中的nil一样。

>>> cons(1, None)
[1]

cons包遵循类似于Scheme的空序列语义。

>>> 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

默认情况下,str类型不被视为cons对,尽管它们是序列。

>>> cons("a", "string")
ConsPair('a' 'a string')

此设置可以覆盖,并且可以通过将类注册到基于abc的类MaybeConsNonCons来排除其他类型。

功能

  • 内置对标准Python有序序列类型的支持:即listtupleIteratorOrderedDict
>>> from collections import OrderedDict
>>> cons(('a', 1), OrderedDict())
OrderedDict([('a', 1)])
  • 可以通过通用函数cons.core._carcons.core._cdr更改现有的cons行为并添加对新集合的支持。
  • 内置对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]

安装

pip install cons

开发

首先获取项目源代码

git clone git@github.com:pythological/python-cons.git

创建虚拟环境并安装开发依赖项

$ pip install -r requirements.txt

设置 pre-commit 钩子

$ pre-commit install --install-hooks

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

cons-0.4.6.tar.gz (26.2 kB 查看哈希值)

上传时间

由支持