跳转到主要内容

Python 的 cons 扩展模块

项目描述

fastcons

Fastcons 是一个 Python 扩展模块,旨在提供 cons 的有效实现。

fastcons 模块提供两种类型: nilconsnil 类型表示空列表,而 cons 类型表示一对 - 包含两个元素的不可变单元格。

目前需要 Python 3.11,以及 Linux 或 MacOS。

安装

您可以使用 pip 安装 fastcons

pip install fastcons

用法

fastcons 模块提供两种类型

  • nil:表示空列表;
  • cons:表示一对。

您可以通过调用 nil() 创建 nil 对象。

您可以通过调用 cons(head, tail) 创建 cons 对象。 cons 可以用来创建链表:如果链表以 nil() 结尾,则一系列 cons 对象被视为列表,例如 cons(1, cons(2, cons(3, nil())))

您可以使用 cons.from_xs 方法从 Python 序列高效地创建 cons 列表,其中 xs 是一个序列。

from fastcons import cons, nil

# Create a cons list using the cons function
xs = cons(1, cons(2, cons(3, nil())))

# Create a cons list from a Python sequence
ys = cons.from_xs([1, 2, 3])

# Access the head and tail of a cons list
assert xs.head == 1
assert xs.tail.head == 2

# Test for equality
assert xs == ys

cons 对象使用 Lisp 风格的表示法打印,这使得阅读长列表更容易。

>>> cons.from_xs(range(1, 4))
(1 2 3)
>>> cons("foo", "bar")
('foo' . 'bar')
>>> cons(cons(1, 2), cons(cons(3, 4), nil()))
((1 . 2) (3 . 4))

cons.lift 可以用于递归地将字典、列表、元组和生成器转换为 cons 对象。字典将被转换为对(关联列表或 alists),其余将被转换为 alists。

>>> cons.lift({'a': 2, 'b': 3})
(('a' . 2) ('b' . 3))
>>> cons.lift((1, 2, 3))
(1 2 3)
>>> cons.lift(x for x in ('a', 'b', 'c'))
('a' 'b' 'c')
>>> cons.lift({x: {x: y}} for x, y in zip(['a', 'b', 'c'], range(1, 4)))
((('a' ('a' . 1))) (('b' ('b' . 2))) (('c' ('c' . 3))))

模式匹配

支持 PEP 622 模式匹配的 consnil

>>> match nil():
...   case nil():
...     print(nil())
...
nil()
>>> match cons(1, nil()):
...   case cons(a, d):
...     print(f"{a = }, {d = }")
...
a = 1, d = nil()

API 参考

nil()

返回单例 nil 对象。nil 对象是假的。

cons(head, tail)

返回具有给定 headtailcons 对象。

cons.from_xs(xs)

返回由 Python 序列 xs 创建的 cons 对象。

cons.lift(xs)

递归创建一个 cons 结构,通过将

  • 列表、元组和生成器转换为 cons 列表;以及
  • 字典转换为 cons 列表对(关联列表)。

assoc(object, alist)

alist 中找到第一个 car 等于 object 的对,并返回该对。如果没有找到对,或者 alistnil(),则返回 nil()

assp(predicate, alist)

返回 alist 中第一个满足对其 car 调用 'predicate' 结果为真值的对。'predicate' 将以单个位置参数调用。

许可证

fastcons 采用 MIT 许可证发布。

项目详情


下载文件

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

源代码分发

此版本没有可用的源代码分发文件。请参阅有关 生成分发存档 的教程。

构建分发

fastcons-0.4.1-cp312-cp312-musllinux_1_1_x86_64.whl (38.9 kB 查看散列)

上传时间 CPython 3.12 musllinux: musl 1.1+ x86-64

fastcons-0.4.1-cp312-cp312-musllinux_1_1_i686.whl (36.9 kB 查看散列)

上传时间 CPython 3.12 musllinux: musl 1.1+ i686

fastcons-0.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (36.4 kB 查看散列)

上传时间 CPython 3.12 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

fastcons-0.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (33.8 kB 查看散列)

上传时间 CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

fastcons-0.4.1-cp312-cp312-macosx_10_9_x86_64.whl (10.9 kB 查看散列)

上传时间 CPython 3.12 macOS 10.9+ x86-64

fastcons-0.4.1-cp311-cp311-musllinux_1_1_x86_64.whl (37.9 kB 查看散列)

上传于 CPython 3.11 musllinux: musl 1.1+ x86-64

fastcons-0.4.1-cp311-cp311-musllinux_1_1_i686.whl (36.0 kB 查看哈希)

上传于 CPython 3.11 musllinux: musl 1.1+ i686

fastcons-0.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (35.3 kB 查看哈希)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

fastcons-0.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (33.0 kB 查看哈希)

上传于 CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

fastcons-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl (10.7 kB 查看哈希)

上传于 CPython 3.11 macOS 10.9+ x86-64

支持者