如何使用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识别)
我现在仍然坚持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中实现了一个不纯的无类型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指数的情况下这样做.