在Javascript中,要检查所有哈希元素是否满足某个条件,可以这样做:
var dict = {
elm: 4,
language: 7,
is: 3,
awesome: 11
};
function allEven(dict) {
for (var key in dict) {
if (dict[key] % 2 === 1) {
return false;
}
}
return true;
}
console.log(allEven(dict));
这里的要点是我们尽快停止计算。
不幸的是,我在Elm中找不到Dict.all
函数。
我想另一种选择是将Dict
转换为List
并使用List.all
。但是,如果可能的话,我想避免创建List
。
你如何在Elm中实现这种短路机制?
答案 0 :(得分:1)
一般来说,我们只是使用folds构建这些函数:
import Dict
dictAll : (comparable -> Bool) -> Dict.Dict comparable b -> Bool
dictAll predicate =
Dict.foldr (\key _ soFar -> soFar && predicate key) True
这将遍历字典中的每个元素,并检查它是否符合谓词,并且所有先前的元素都符合谓词。
你可以用“任意”做同样的事情,将True改为False,将&&
改为||
。