我以前在C++ 中使用(非常基本的)光线跟踪软件.现在想从头开始创建一个高级系统(CSG,光能传递等).
我发现在Haskell中实现它很有意思,因为我也在学习函数式编程.
性能是光线跟踪算法中非常重要的事实.Haskell程序通常比C++程序慢.多少?这取决于具体情况.
考虑到这种情况(即可能是非常复杂的RT),在Haskell中工作是否可行?
在ghci(8.2)上,
:k ('[] :: [(Type,Type)])
Run Code Online (Sandbox Code Playgroud)
成功,但是
:k ('[(Bool,Bool)] :: [(Type,Type)])
Run Code Online (Sandbox Code Playgroud)
不,因为(Bool,Bool)(甚至像('True,False')这样的东西都有种类*.
我理解问题在于(,)构造函数,它构造了一个*Type.
表示类型级强类型对的列表的方法是什么?
我有以下标识,它(隐式)定义正整数的分区数(即,您可以将整数写为有序正非零整数之和的方式):

一些说明:
这在Flajolet和Sedjewick的Analytic Combinatorics一书中进行了研究,并且该公式的图像来自那里,因为stackoverflow不支持LaTeX.
sigma是一个数的除数的总和
我想编写一个计算带有P系数的列表的haskell程序.第i个术语取决于所有先前的术语(是压缩sigma和之前的Ps导致的列表的总和).这个问题就是如何从规范中"计算"程序的一个很好的例子,就像Gibbons在他的论文中写道的那样.
问题是:是否存在捕获此类计算的已知递归方案?列表中的每个术语都取决于所有先前术语的计算(并且结果与之前的术语无关,我的意思是,您必须为每个术语执行新的遍历)
recursion haskell formal-methods functional-programming lazy-evaluation
我正在一个haskell程序中实现CSG.当我在OOP lahguage中做到这一点时,我受到了复合赞助人的启发.
我有一个抽象类"对象",一些具体对象(球体,平面等),以及一个具体的类"CompositeObject",其中包含一个运算符和两个指向Object的指针.
为了在Haskell中以这种方式实现CSG树,我正在考虑递归数据类型:
data Shape = Sphere (..some types here..)
| ..other primitive objects..
| Composite Shape Op Shape
Run Code Online (Sandbox Code Playgroud)
然后我通过模式匹配在对象上定义函数.这里的问题是所有对象都必须在此模块中.所有物体都集中在整体中.
我认为有一个对象的类型类是一个好主意:
class Shape a where
intersection :: Ray -> a -> [Points]
normal :: Point -> a -> Vector
...
Run Code Online (Sandbox Code Playgroud)
现在我为Sphere,plane,cilinder等定义实例.
但复合对象呢?如何创建一个由两种类型构造的类型,类函数取决于构造函数,或类似的东西?
haskell functional-programming raytracing typeclass algebraic-data-types