有一个布尔表的列表,如果列表包含奇数个True分量,我需要返回True。但我不知道从哪里开始。任何帮助将不胜感激。如何计算Haskell中的布尔值而不使用count?
回答
基本上,你想要的功能,看起来像这样:
f x True = not x
f x False = x
该函数使用第一个参数作为一个“国家”,如果第二个参数是True
然后翻转x
,如果第二个参数是False
那么不要对x
做任何事情。然后,您可以使用foldl
(或Data.List.foldl'
获得更好的性能)来确定的True
S IN列表中的数是奇数:
hasOddTrues :: [Bool] -> Bool
hasOddTrues bs = foldl f False bs
此代码等同于Python代码
def f(x, y):
if y: return not x
else: return x
def hasOddTrues(bs):
isOdd = False
for b in bs:
isOdd = f(isOdd, b)
return isOdd
在
fold
概括了迭代项目集合的概念,其中状态在每次迭代时都会发生变化,具体取决于前一个值和当前元素。
不是你的'f'函数只是'(/ =):: Bool - > Bool - > Bool'?我认为如果你把它看作是列表中的N个项目(因为Bools,xor与/ =相同),它会更清晰。 – amalloy 2014-10-22 03:44:52
为什么不写'奇怪的。长度 。过滤器(== True)'?它更具可读性。另外由于[流融合](http://www.reddit.com/r/haskell/comments/1br0ls/haskell_beats_c_using_generalised_stream_fusion/),它将非常有效地运行。 – 2014-10-22 04:57:15
- 1. 如何使用Count()而不计算SQLITE中不同行中的重复值?
- 2. 布尔值计算
- 3. 使用COUNT计算()
- 4. 增值税计算器布尔值
- 5. 如何计算两个数据框中两列的布尔值?
- 6. 用错误计算多列中的值布尔值
- 7. 使用Ruby on Rails从布尔值计算平均值
- 8. 使用SQL COUNT创建计算列COUNT
- 9. MySQL的SELECT COUNT> 0的布尔值
- 10. 如何比较Max(Count(*))值而不使用MS SQL中的SubQuery?
- 11. 结构指令,我可以得到属性值,而不是计算布尔值
- 12. Doctrine2 ODM COUNT()不计整数值使用Zendframework2和使用count函数计算值的数量
- 13. elasticsearch布尔查询如何计算
- 14. 在rails下计算布尔值
- 15. Knockout计算可观察布尔值,使用ajax调用不返回布尔值在成功
- 16. 什么时候应该使用布尔值而不是布尔值?
- 17. 如何在SQL中使用布尔值
- 18. COUNT(*)0布尔场
- 19. 计算N-Ary(带不同类型!!)Haskell中的笛卡尔积
- 20. 如何使用BeanUtils copyProperties从布尔值复制到布尔值?
- 21. 如何计算mysql中count列中值的总和?
- 22. 使用timedelta和布尔值计算时间范围
- 23. 如何在Haskell中返回一个布尔值
- 24. 如何使用COUNT计算两列中出现的次数?
- 25. 用于布尔计算的Lex/Yacc
- 26. 计数布尔运算符
- 27. 如何计算行用SELECT COUNT(*)
- 28. 布尔值,而不是通过Symfony的
- 29. 如何在Haskell中使用hmatrix来计算矩阵的梯度?
- 30. 如何在Kotlin中使用GROUP BY计算COUNT(*)?
你尝试过奇怪吗?长度 。过滤器(== True)$ list'其中'list'是您的布尔值列表? – 2014-10-22 03:23:41
最后我做这种方式 XOR = \ BS - >如果MOD(长度(过滤器(==真)BS))2 == 0则假否则真 感谢您的帮助 – Huskey27 2014-10-22 04:00:57
'奇怪。总和。来自Enum的地图 – user2407038 2014-10-22 04:31:13