我在重写使用高阶函数的方法时遇到了一些麻烦。这是尝试(它编译但不运行它工作正常):
fun lookup2 key hash =
List.foldr (fn ((k, v), r) => if k = key then SOME v else r) NONE hash;
背景:
这个想法是有一个像这样的哈希,我正在通过字符串键查找一个 int 选项:
- val h = [("a", 5), ("b", 4)];
- lookup "a" h;
val it = SOME 5 : int option
我写了一个效果很好的:
fun lookup _ nil = NONE
| lookup key ((k, v)::xs) = if k = key then SOME v else lookup key xs;
但是我想重写它以帮助熟悉 sml。我有一个偷偷摸摸的怀疑我不太明白foldr
......
我的错误- 我不小心用不同的lookup2
. 它按预期工作。