我已经构建了一棵树,我想从中收集所有Leaf类型:
Branch [] (Branch [0] (Leaf [0,1]) (Branch [0] (Leaf [0,2]) (Branch
[0] (Leaf [0,3]) (Leaf [0])))) (Branch [] (Branch [1] (Leaf [1,2])
(Branch [1] (Leaf [1,3]) (Leaf [1]))) (Branch [] (Branch [2] (Leaf
[2,3]) (Leaf [2])) (Branch [] (Leaf [3]) (Leaf []))))
Run Code Online (Sandbox Code Playgroud)
我:t在上述变量的GHCI()中得到的类型是:
Tree [Int]
Run Code Online (Sandbox Code Playgroud)
数据结构如下:
data Tree a = Empty | Leaf a | Branch a (Tree a) (Tree a)
Run Code Online (Sandbox Code Playgroud)
我试图孤立ONLY叶子,这样我会获得:
[ [0,1], [0,2] .. [3], [] ]
Run Code Online (Sandbox Code Playgroud)
我一直试图filter在结果上运行,但这不起作用.我已经尝试使用该函数Data.Foldable.toList,但它也会拉入所有分支并导致大量列表中包含多个重复项,并且无法判断它是分支还是叶子.
我目前正在制作战斗游戏的领域模型,我很难确定某些元素应该是他们自己的类还是某些类的属性.例如,我使用类别列表来确定以下想法/对象:战斗机,等级,武器,护甲,属性,技能,竞技场,游戏模式,游戏日志,对手.
例如,我无法判断水平,武器,护甲,属性,技能是否应简单地说明为战斗机的属性,还是应将它们划分为自己的对象.我不知道对手是否应该是一个独特的阶级,因为它最终是一个战斗机对象与另一个战斗机的"攻击/防御"关联.
如何确定类别列表中每个元素的正确选择?这些可能是主观的吗?
仅供参考,我使用Craig Larman的"应用UML和模式"第3版作为信息源.
我在理解实施某些功能的问题时遇到了困难.我有一个通用数据类型定义如下:
import qualified Data.Map.Strict as Map
data Stuff x = Stuff (Map.Map x [x])
Run Code Online (Sandbox Code Playgroud)
当我尝试实现这样的功能时:
foo :: Ord x => x -> x -> Stuff x -> Stuff x
foo a b (Stuff c) = Stuff (Map.insert (a b c))
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
Couldn't match expected type ‘Map.Map x [x]’
with actual type ‘a0 -> Map.Map k0 a0 -> Map.Map k0 a0’
Run Code Online (Sandbox Code Playgroud)
但是,当我验证Haskell文档中的签名时:
insert :: Ord k => k - > a - > Map ka - > Map ka
如果它返回"Map k …