1 个不稳定版本
0.1.2 | 2024 年 7 月 9 日 |
---|---|
0.1.1 |
|
#1085 在 Rust 模式
每月 29 次下载
98KB
2K SLoC
贝达
这是 MVP 阶段。
示例
import benda
import random
book = benda.load_book("""
(Sort List/Nil) = List/Nil
(Sort(List/Cons head tail)) =
((Part head tail) λmin λmax
let lft=(Sort min)
let rgt=(Sort max)
(Concat lft(List/Cons head rgt)))
# Partitions a list in two halves, less-than-p and greater-than-p
(Part p List/Nil) = λt(t List/Nil List/Nil)
(Part p(List/Cons head tail)) = (Push(> head p) head(Part p tail))
# Pushes a value to the first or second list of a pair
(Push 0 x pair) = (pair λmin λmax λp(p(List/Cons x min) max))
(Push _ x pair) = (pair λmin λmax λp(p min(List/Cons x max)))
(Concat List/Nil tail) = tail
(Concat(List/Cons head tail) xs2) =
(List/Cons head(Concat tail xs2))
""")
List = book.adts.List
def gen_list(n: int, max_value: int = 0xffffff) -> list[int]:
result: list[int] = []
for _ in range(n):
result.append(random.randint(0, max_value))
return result
def to_cons_list(xs: list[int]):
result = List.Nil()
hi = len(xs)
if hi == 0:
return result
while hi > 0:
hi -= 1
result = List.Cons(xs[hi], result)
return result
def print_cons_list(list):
while True:
match list:
case List.Cons.type(value, tail):
print(value, end=", ")
list = tail
case List.Nil.type():
break
data = gen_list(5, 1000)
cons_list = to_cons_list(data)
book.set_cmd(benda.BendRuntime.Cuda)
sorted_list = book.defs.Sort(cons_list)
sorted_list = sorted_list.to_adt(book.adts.List)
print_cons_list(sorted_list)
安装
要安装当前版本
$ pip install benda
开发
依赖项
- Python 3.11+
- Rust
- C 编译器
- maturin
使用 Nix 获取依赖项(可选)
-
使用 Determinate Nix 安装程序 安装 Nix
curl --proto '=https' --tlsv1.2 -sSf -L \ https://install.determinate.systems/nix | sh -s -- install
-
您可以运行
nix develop
进入一个已安装依赖项的 shell。
构建
-
创建并激活一个 Python 虚拟环境。
- 例如
python -m venv .venv source .venv/bin/activate
- 例如
-
运行
make
构建项目并在虚拟环境中安装benda
软件包。
依赖项
~17–24MB
~359K SLoC