相关疑难解决方法(0)

如何枚举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
查看次数

根据以前的元素计算列表的下一个元素

我想定义一个无限列表,其中每个元素都是前面所有元素的函数.

所以,n+1列表的第th个元素是f [x1, x2, ..., xn].

这看起来很简单,但我似乎无法理解如何做到这一点.有人可以帮忙吗?

haskell

5
推荐指数
1
解决办法
638
查看次数

标签 统计

haskell ×2

functional-programming ×1

grammar ×1

monads ×1