小编Mar*_*ark的帖子

在Haskell OpenGL中加载JuicyPixels纹理?

如何使用Haskell,OpenGL和JuicyPixels库加载纹理?

我可以得到这样的:

loadImage :: IO ()
loadImage = do image <- readPng "data/Picture.png"
               case image of 
                 (Left s) -> do print s
                                exitWith (ExitFailure 1)
                 (Right d) -> do case (ImageRGBA i) -> do etc...
Run Code Online (Sandbox Code Playgroud)

如何将其转换为TextureObject?我想我需要在Vector Word8和PixelData之间进行转换(用于OpenGL识别)

opengl haskell

12
推荐指数
1
解决办法
1719
查看次数

Haskell:对插入排序的懒惰与急切评估

我现在仍然坚持IFPH第7章的一个问题.

这是练习7.1.2内容如下:

"一个定义sort是采取sort = foldr insert []在哪里

insert x [] = [x]
insert x (y:ys) = if x <= y then x : y : ys else y : insert x ys
Run Code Online (Sandbox Code Playgroud)

详细sort [3,4,2,1]说明表达式的急切和懒惰的评估减少序列,解释它们的不同之处"

现在,我首先从急切的评估减少序列开始,我假设是最内部的减少.

这对我来说......

sort [3,4,2,1] 
=> foldr insert [] [3,4,2,1]
=> insert 3 (foldr insert [] [4,2,1])
=> insert 3 (insert 4 (foldr insert [] [2,1]
=> insert 3 (insert 4 (insert 2 (foldr insert [] [1]))) …
Run Code Online (Sandbox Code Playgroud)

haskell

8
推荐指数
1
解决办法
1634
查看次数

Haskell和Lambda-Calculus:实现Alpha-Concruence(Alpha-Equivalence)

我在Haskell中实现了一个不纯的无类型lambda-calculus解释器.

我目前仍然坚持实施"alpha-conruence"(在某些教科书中也称为"alpha-equivalence"或"alpha-equality").我希望能够检查两个lambda表达式是否相等或相等.例如,如果我在解释器中输入以下表达式,它应该产生True(\用于表示lambda符号):

>\x.x == \y.y
True
Run Code Online (Sandbox Code Playgroud)

问题是要理解以下lambda表达式是否被视为alpha-equivalent:

>\x.xy == \y.yx
???

>\x.yxy == \z.wzw
???
Run Code Online (Sandbox Code Playgroud)

\x.xy == \y.yx我猜的情况下,答案是True.这是因为\x.xy => \z.zy\y.yx => \z.zy两者的右侧相等(其中符号=>用于表示减少α).

在cae中\x.yxy == \z.wzw我也会猜到答案是True.这是因为\x.yxy => \a.yay\z.wzw => \a.waw它(我认为)是相等的.

问题是我的所有教科书的定义都指出,只有两个lambda表达式需要更改绑定变量的名称才能被认为是相等的.它没有说明需要统一重命名的表达式中的自由变量.因此即使y并且w它们都在lambda表达式中的正确位置,程序如何"知道"第一个y代表第一个w而第二个y代表第二个w.我需要在实现中保持一致.

简而言之,我将如何实现函数的无错误版本isAlphaCongruent?为了实现这一目标,我需要遵循哪些准确的规则?

我更愿意在不使用de Bruijn指数的情况下这样做.

haskell lambda-calculus

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

标签 统计

haskell ×3

lambda-calculus ×1

opengl ×1