小编lan*_*ndo的帖子

Haskell中的光线追踪

我以前在C++ 中使用(非常基本的)光线跟踪软件.现在想从头开始创建一个高级系统(CSG,光能传递等).

我发现在Haskell中实现它很有意思,因为我也在学习函数式编程.

性能是光线跟踪算法中非常重要的事实.Haskell程序通常比C++程序慢.多少?这取决于具体情况.

考虑到这种情况(即可能是非常复杂的RT),在Haskell中工作是否可行?

performance haskell raytracing

3
推荐指数
1
解决办法
2073
查看次数

什么是[(类型,类型)]种类的居民?

在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.

表示类型级强类型对的列表的方法是什么?

haskell types ghc type-level-computation

3
推荐指数
1
解决办法
88
查看次数

根据所有先前的术语计算列表的术语

我有以下标识,它(隐式)定义正整数的分区数(即,您可以将整数写为有序正非零整数之和的方式):

一些说明:

  1. 这在Flajolet和Sedjewick的Analytic Combinatorics一书中进行了研究,并且该公式的图像来自那里,因为stackoverflow不支持LaTeX.

  2. sigma是一个数的除数的总和

我想编写一个计算带有P系数的列表的haskell程序.第i个术语取决于所有先前的术语(是压缩sigma和之前的Ps导致的列表的总和).这个问题就是如何从规范中"计算"程序的一个很好的例子,就像Gibbons在他的论文中写道的那样.

问题是:是否存在捕获此类计算的已知递归方案?列表中的每个术语都取决于所有先前术语的计算(并且结果与之前的术语无关,我的意思是,您必须为每个术语执行新的遍历)

recursion haskell formal-methods functional-programming lazy-evaluation

1
推荐指数
2
解决办法
531
查看次数

函数式编程中的构造性实体几何

我正在一个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

0
推荐指数
1
解决办法
332
查看次数