我正在尝试在 Clojure 中创建一个用于图像合成的小型库/DSL。基本上,这个想法是允许库的用户组合数学函数集,以程序方式创建有趣的图像。
函数需要对双精度值进行操作,并采取将位置向量转换为颜色值的形式,例如 (x,y,z) - > (r,g,b,a)
但是,我面临一些有趣的设计决策:
- 输入可能有 1、2、3 甚至 4 个维度(x、y、z 加上时间)
- 最好提供向量数学运算(点积、加法、乘法等)
- 将函数与诸如旋转、缩放等操作组合起来是很有价值的。
- 出于性能原因,在整个过程中使用原始双精度数学非常重要(即,特别要避免创建盒装双精度)。所以一个需要返回红色、绿色和蓝色分量的函数可能需要成为三个独立的函数,分别返回原始的红色、绿色和蓝色值。
关于如何在 Clojure(1.4 beta)中合理实现这种 DSL 的任何想法?