如何在SML中创建使用模式匹配的匿名函数(非常有趣)?

如何在SML中创建使用模式匹配的匿名函数(非常有趣)?,sml,smlnj,Sml,Smlnj,我有一个数据类型: datatype 'a tree = LEAF of 'a | NODE of 'a tree * 'a tree; 我希望创建一个名为maptree(f)的函数,它返回一个匿名函数,能够在树上执行f元素。为什么下面的方法不起作用 fun maptree(f) = fn LEAF(a) => LEAF(f(a)) | NODE((b,c)) => NODE(f(b), f(c)); 我得到一个错误:

我有一个数据类型:

datatype 'a tree = LEAF of 'a 
            | NODE of 'a tree * 'a tree;
我希望创建一个名为maptree(f)的函数,它返回一个匿名函数,能够在树上执行f元素。为什么下面的方法不起作用

fun maptree(f) = fn LEAF(a) => LEAF(f(a))
                  | NODE((b,c)) => NODE(f(b), f(c));
我得到一个错误:

stdIn:56.7-56.65 Error: types of rules don't agree [circularity]
earlier rule(s): 'Z tree tree -> 'Y tree tree
this rule: 'Z tree -> 'Y tree
in rule:
NODE (b,c) => NODE (f b,f c)
所以你不能把它应用到树上。你可能想要

fun maptree f = fn LEAF a => LEAF (f a)
                 | NODE(b,c) => NODE (maptree f b, maptree f c);
所以你不能把它应用到树上。你可能想要

fun maptree f = fn LEAF a => LEAF (f a)
                 | NODE(b,c) => NODE (maptree f b, maptree f c);
所以你不能把它应用到树上。你可能想要

fun maptree f = fn LEAF a => LEAF (f a)
                 | NODE(b,c) => NODE (maptree f b, maptree f c);
所以你不能把它应用到树上。你可能想要

fun maptree f = fn LEAF a => LEAF (f a)
                 | NODE(b,c) => NODE (maptree f b, maptree f c);