给出Haskell中的以下树结构:
data Tree = Leaf Int | Node Int Tree Tree deriving Show
Run Code Online (Sandbox Code Playgroud)
如何让Haskell返回预订中的数据列表?
例如给一棵树:
Node 1 (Leaf 2) (Leaf 3)
Run Code Online (Sandbox Code Playgroud)
返回类似的东西:
preorder = [1,2,3]
Run Code Online (Sandbox Code Playgroud) 我想用标准 ML 制作函数映射树。如果函数 f(x) = x + 1; 然后
maptree(f, NODE(NODE(LEAF 1,LEAF 2),LEAF 3));
Run Code Online (Sandbox Code Playgroud)
应该做出结果
NODE(NODE(LEAF 2,LEAF 3),LEAF 4))
Run Code Online (Sandbox Code Playgroud)
我写的代码如下。
datatype 'a tree = LEAF of 'a | NODE of 'a tree * 'a tree;
fun f(x) = x + 1;
fun maptree(f, NODE(X, Y)) = NODE(maptree(f, X), maptree(f, Y))
| maptree(f, LEAF(X)) = LEAF(f X);
Run Code Online (Sandbox Code Playgroud)
但是当我像这样执行这段代码时
maptree(f, (NODE(NODE(LEAF 1,LEAF 2),LEAF 3)));
Run Code Online (Sandbox Code Playgroud)
结果不是我想要 (NODE(NODE(LEAF 2,LEAF 3),LEAF 4))) 而是 NODE(NODE(LEAF #,LEAF #),LEAF 4))。为什么会发生这种情况(不是数字而是#)?