我试图通过绑结结构来形成像数据结构这样的无限网格。 这是我的方法: import Control.Lens
data Grid a = Grid {_val :: a,
_left :: Grid a,
_right :: Grid a,
_down :: Grid a,
_up :: Grid a}
makeLens
在我最初的尝试是创造我创建了一个Point数据类型与parent指针不相交集数据结构到另一个Point: data Point a = Point
{ _value :: a
, _parent :: Point a
, _rank :: Int
}
要创建一个单集,一个Point创建具有自身作为其父(我相信这就是所谓绑结): makeSet' :: a
捆扎-的结策略可以用于构造图等,使用简单的一柄图为例: data Node = Node Node Node
-- a - b
-- | |
-- c - d
square = a where
a = Node b c
b = Node a d
c = Node a d
d = Node b c
这种策略是相当完美的,但我无法找到一种方法实际使
更新:我已经添加了an answer,它描述了我的最终解决方案(提示:单个的Expr数据类型是不够的)。 我writing一点点表达式语言的评估,但是我卡上的LetRec结构。 这是语言: type Var = String
type Binds = [(Var, Expr)]
data Expr
= Var Var
| Lam Var Expr
| App