Как я могу сделать анонимную функцию в SML, которая использует сопоставление с образцом (как забаву)?
У меня есть тип данных:
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)
1 ответ
f : 'a -> 'b
так что вы не можете применить его к дереву. Вы, вероятно, хотели.
fun maptree f = fn LEAF a => LEAF (f a)
| NODE(b,c) => NODE (maptree f b, maptree f c);