高階関数を使用するようにメソッドを書き直すのに少し問題があります。これがその試みです(コンパイルされますが実行されません):
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
。期待どおりに動作します。