小编kor*_*mer的帖子

我想用标准 ML 制作函数映射树

我想用标准 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))。为什么会发生这种情况(不是数字而是#)?

sml smlnj

4
推荐指数
1
解决办法
830
查看次数

标签 统计

sml ×1

smlnj ×1