2 个不稳定版本

0.2.0 2022年4月18日
0.1.0 2022年4月18日

#598 in 编程语言

MIT/Apache

46KB
897

Aude

一个使用类似 Lisp 的函数式编程语言的自动微分求解器

=== Aude 0.2 ===
Type `help` for more information.
> mul

mul

ty: (fun (tup f64 f64) f64)

D: (lam (tup f64 f64) (tup mul($0) (lin_lam (tup f64 f64) add((tup mul((tup fst(f64)(f64)($0) fst(f64)(f64)($1))) mul((tup snd(f64)(f64)($0) snd(f64)(f64)($1))))))))

要在终端运行 Aude,请输入

cargoinstall --exampleaude aude

然后,要运行

aude

参考文献

自动微分的简单本质

设计

Aude 使用类似 Lisp 的语法,以避免在与其他编程语言之间转换时的痛苦。

例如,而不是使用 f64 -> f64,Aude 使用 (ty f64 f64)

函数应用使用语法 <function>(<argument>),例如 sin(0)

变量使用 De Bruijn 索引,例如 $0 指的是 lambda 参数。

所有操作符都接受 2 个参数,例如 (fun f64 f64)

特性

函数 描述
add 加法
cos 余弦(三角函数)
fst 元组第一个组件
fst_par 并行第一个组件
id 恒等函数
neg 否定
mul 乘法
sin 正弦(三角函数)
snd 元组第二个组件
snd_par 并行第二个组件
Op 描述 示例
comp 组合函数 g.f= (comp g f)
lin_comp 组合线性函数 g.f= (lin_comp g f)
fun 函数类型 f64 -> f64 = (funf64 f64)
lin 线性函数类型 f64 -of64 = (linf64 f64)
lam lambda 表达式 \x:f64.x= (lamf64 $0)
lam_lin 线性 lambda 表达式 \x:f64.x= (lin_lamf64 $0)
par 并行元组 f x g= (par f g)
tup 元组 (f,g) = (tup f g)
ty 类型 x: f64 = (ty xf64)

依赖项

~250KB