Python中类似于Lisp/Scheme的cons实现。
项目描述
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
的类MaybeCons
和NonCons
来排除其他类型。
功能
- 内置对标准Python有序序列类型的支持:即
list
、tuple
、Iterator
、OrderedDict
。
>>> from collections import OrderedDict
>>> cons(('a', 1), OrderedDict())
OrderedDict([('a', 1)])
- 可以通过通用函数
cons.core._car
和cons.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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 669fe9d5ee916d5e42b9cac6acc911df803d04f2e945c1604982a04d27a29b47 |
|
MD5 | 20d58dac0a00683f3d58f040e964049b |
|
BLAKE2b-256 | 1c9023f2b21206c4dc62edc3ee9c051fe06ef92b9213141498505a3e19b36c09 |