Haskell:想要一个更好的方法:value == x || value == y ||

栏目: 编程语言 · 发布时间: 7年前

内容简介:翻译自:https://stackoverflow.com/questions/4294652/haskell-want-a-better-way-of-doing-value-x-value-y
我是 Haskell

的新手,很抱歉,如果这非常明显……

我已经做了以下函数(这里用作例子来询问多个值== something || value == somethingElse checks)来检查一个字符是否是一个数字:

isDigit :: Char -> Bool
isDigit x = 
    if 
    x == '0' 
    || x == '1'  
    || x == '2'  
    || x == '3'  
    || x == '4'  
    || x == '5'  
    || x == '6'  
    || x == '7'  
    || x == '8'  
    || x == '9'  
    then True  
    else False

当然,虽然必须有一个简洁的方法来编写上面的函数,所以你不必重复|| x ==那么多?

预先感谢您的帮助 :)

(如果相关:我使用Hugs作为翻译.)

在这种情况下,您可以使用Prelude中的elem:

isDigit x = elem x "0123456789"

(请记住,字符串是Char的列表)

或者您可以使用Data.Char中的isDigit

是的,几乎每种重复模式都有一种简洁的方法.以下是如何为此推导出来的.从字符列表开始(为简洁起见我只做0-4)

"01234"

映射比较:

map (x ==) "01234"
  = [x == '0', x == '1', x == '2', x == '3', x == '4']
  = (x == '0') : (x == '1') : (x == '2') : (x == '3') : (x == '4') : []

然后使用foldr. foldr f z最好描述为一个函数,它接受一个列表并替换:f和[]和z.

foldr (||) False (map (x ==) "01234")
  = x == '0' || x == '1' || x == '2' || x == '3' || x == '4' || False

你有它. foldr是list函数的祖先,所以这是没有显式递归的“最低级别”方式.以下是您的词汇量的两个拼写:

isDigit x = any (x ==) "0123456789"
isDigit x = or [ x == d | d <- "0123456789" ]

如果我不得不猜测最常见的“惯用”拼写,它可能是第一个的变体:

isDigit = (`elem` "0123456789")

一旦你熟悉Prelude中的所有方便功能,编写这样的代码是一件快乐的事:-)

翻译自:https://stackoverflow.com/questions/4294652/haskell-want-a-better-way-of-doing-value-x-value-y


以上所述就是小编给大家介绍的《Haskell:想要一个更好的方法:value == x || value == y ||》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

读屏时代

读屏时代

(美)Naomi S. Baron(内奥米·S.巴伦) / 庞洋 / 电子工业出版社 / 2016-7 / 55.00

书中作者探讨了技术如何重塑人们对阅读的定义。数字阅读越来越受欢迎,更便利、节约成本、并把免费书籍提供给全世界的读者。但是,作者也指出其弊处在于读者很容易被设备上的其他诱惑分心、经常走马观花而非深入阅读。更重要的是,人们阅读方式的变化会影响了作者的写作方式。为了迎合人们阅读习惯的转变,许多作家和出版商的作品越来越短小和碎片化,或者更青睐无需思考和细读的作品。作者比较了纸质阅读和在线阅读的重要性,包括......一起来看看 《读屏时代》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具