如何实现一个以int开头的函数,并且每次从它中减去1(通过有限数量的可能性),其中一个(例如,5个)布尔值返回1.
理想情况下看起来如何:
function list1 list2 = num
where
num = 4
- (condition from var1 = true)
- (condition from var2 = true)
- (so on, so forth as long as needed)
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的实现这些行:
num = startVal
- (list1conditional == desiredVal)
- (etc)
Run Code Online (Sandbox Code Playgroud)
但这是返回类型错误.
Bool是一个实例Enum:你可以枚举a Bool:的两个值False,然后True.
其结果是,它实现了fromEnum :: Enum a => a -> Int,一个映射的值的函数Enum类型到Int:要Bool,它映射False到0和True到1.
所以我们可以这样使用:
result = 5 - fromEnum cond1 - fromEnum cond2
Run Code Online (Sandbox Code Playgroud)
或者例如条件列表:
result = 5 - sum (map fromEnum [cond1, cond2, cond3])
Run Code Online (Sandbox Code Playgroud)
where cond1和cond2等是类型的表达式Bool.