小编Mai*_*tor的帖子

如何枚举Haskell中的递归数据类型?

这篇博文有一个有趣的解释,说明如何使用Omega monad对角枚举任意语法.他提供了一个如何操作的示例,从而产生无限的字符串序列.我想做同样的事情,除了生成一个实际数据类型列表,而不是生成字符串列表.例如,

 data T = A | B T | C T T
Run Code Online (Sandbox Code Playgroud)

会生成

A, B A, C A A, C (B A) A... 
Run Code Online (Sandbox Code Playgroud)

或类似的东西.不幸的是,我的Haskell技能仍在成熟,经过几个小时的演奏后,我无法做到我想要的.怎么办?

根据要求,我的一次尝试(我尝试了太多东西......):

import Control.Monad.Omega

data T = A | B T | C T T deriving (Show)

a = [A] 
        ++ (do { x <- each a; return (B x) })
        ++ (do { x <- each a; y <- each a; return (C x y) })

main = print $ take 10 $ a
Run Code Online (Sandbox Code Playgroud)

monads grammar haskell functional-programming

11
推荐指数
2
解决办法
735
查看次数

是否有一个实际的例子,其中内联对C程序的性能有害?

在关于inline函数声明中的关键字的许多争论中,有人会指出它在某些情况下实际上会使程序变慢 - 主要是由于代码爆炸,如果我是正确的.我自己从未在实践中遇到过这样的例子.什么是实际代码,使用inline可能会对性能有害?

c optimization performance inline-functions

11
推荐指数
1
解决办法
259
查看次数

如何在Levy的意义上实现最佳beta减少?

1990年,John Lamping发表了一篇论文,提出了无类型lambda演算的最佳实现.由于那篇论文已有25年历史,我想知道自那以后我们有多少进步.因此,我的问题是:什么是John的最优lambda演算评估算法的简单描述(或者,如果我们自改进算法以来进行了改进),最好简单解释一下Haskellish-pseudocode?

更新:因为自从我问过以后我学到了更多,我相信一个有效的答案可能只是一个非浮动算法的伪代码,它将纯粹的无类型lambda术语映射到交互网络; 2.减少那些网络和3.从网络映射到lambda术语,例如整个过程最佳地规范化初始lambda项.

language-agnostic haskell functional-programming lambda-calculus

11
推荐指数
0
解决办法
579
查看次数

是否可以通过修改这个简单的减速器来展示不同的评估策略?

通过查看代码而不是阅读冗长的解释,我更喜欢学习.这可能是我不喜欢长篇学术论文的原因之一.代码是明确的,紧凑的,无噪音的,如果你没有得到的东西,你可以玩它 - 不需要问作者.

这是Lambda微积分的完整定义:

-- A Lambda Calculus term is a function, an application or a variable.
data Term = Lam Term | App Term Term | Var Int deriving (Show,Eq,Ord)

-- Reduces lambda term to its normal form.
reduce :: Term -> Term
reduce (Var index)      = Var index
reduce (Lam body)       = Lam (reduce body)
reduce (App left right) = case reduce left of
    Lam body  -> reduce (substitute (reduce right) body)
    otherwise -> App (reduce left) (reduce …
Run Code Online (Sandbox Code Playgroud)

lambda haskell functional-programming lambda-calculus lazy-evaluation

11
推荐指数
1
解决办法
141
查看次数

什么是有效实现图像渲染的纯功能数据结构?

图像和像素渲染是Haskell最后的事情之一我无法选择一个足够有效的纯功能数据结构.为简单起见,我们来谈谈1D图像,因为它们可以很容易地扩展到nd图像.我正在使用未装箱的矢量作为表示,并使用它们的可变视图进行渲染:

-- An 1D image is an unboxed vector of Pixels
type Position = Int
data Image    = Image { size :: Position, buffer :: UV.Vector Pixel }

-- A sprite is a recipe to draw something to an Image
newtype Sprite = Sprite (forall s .
    -> (Position -> Pixel -> ST s ()) -- setPixel
    -> ST s ())                       -- ST action that renders to Image

-- Things that can be rendered to screen provide a …
Run Code Online (Sandbox Code Playgroud)

algorithm haskell time-complexity data-structures

11
推荐指数
1
解决办法
284
查看次数

为什么 QuackSort 对随机列表的排序比 Data.List 的排序快 2 倍?

我正在寻找Haskell 上MergeSort的规范实现以移植到HOVM,我找到了这个StackOverflow 答案。在移植算法时,我意识到有些事情看起来很愚蠢:该算法有一个“减半”函数,除了在递归和合并之前使用一半的长度将列表一分为二之外什么也不做。所以我想:为什么不更好地利用这个传球,并使用一个枢轴,使每一半分别比该枢轴小和大呢?这会增加递归合并调用应用于已排序列表的可能性,这可能会加快算法速度!

我已经完成了此更改,生成以下代码:

import Data.List
import Data.Word

randomList :: Word32 -> Word32 -> [Word32]
randomList seed 0    = []
randomList seed size = seed : randomList (seed * 1664525 + 1013904223) (size - 1)

quacksort :: [Word32] -> [Word32]
quacksort []           = []
quacksort [x]          = [x]
quacksort (p : x : xs) = split p (p : x : xs) [] [] where

  -- Splits the list in two halves of elements …
Run Code Online (Sandbox Code Playgroud)

sorting algorithm mergesort haskell quicksort

11
推荐指数
1
解决办法
310
查看次数

是否可以使用 PHOAS 将术语评估为正常形式,然后将其字符串化?

这篇Haskell Cafe 帖子中,并借用jyp的一些代码示例,我们可以在 Haskell 中构造一个简单的 PHOAS 求值器,如下所示:

\n
{-# LANGUAGE GADTs #-}\n{-# LANGUAGE RankNTypes #-}\n\nimport Data.Char\n\ndata Term v t where\n   Var :: v t -> Term v t\n   App :: Term v (a -> b) -> Term v a -> Term v b\n   Lam :: (v a -> Term v b) -> Term v (a -> b)\n\ndata Exp t = Exp (forall v. Term v t)\n\n-- An evaluator\neval :: Exp t -> t\neval (Exp e) = …
Run Code Online (Sandbox Code Playgroud)

haskell lambda-calculus

11
推荐指数
1
解决办法
344
查看次数

在qtScript上JavaScript的setTimeout相当于什么?

没什么可补充的; 在qtScript上JavaScript的setTimeout相当于什么?

javascript timer settimeout qtscript

10
推荐指数
1
解决办法
3990
查看次数

ImageMagick使用超过2GB的内存来转换PDF文件

ImageMagick正在使用大量内存来转换PDF文件 - 超过2GB.我正在使用的命令是:

convert -density 250 -resize 1280x myfile.pdf -interlace plane -strip -quality 40 -alpha flatten myfolder/myfile-%03d.jpg
Run Code Online (Sandbox Code Playgroud)

如何改进?我有1GB的限制,否则这个过程会被无情地杀死.):

memory resources converter imagemagick imagemagick-convert

10
推荐指数
1
解决办法
1万
查看次数

如何在GitHub上挑选拉出请求的5个提交中的2个?

我是GitHub的新手.有人提交了5次提交的拉取请求.但是其中3个有一点虫子,所以必须等待.如何为我的项目挑选其中的2个?

commit github pull-request git-cherry-pick

10
推荐指数
1
解决办法
3350
查看次数