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

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

内容简介:翻译自: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 ||》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

豆瓣,流行的秘密

豆瓣,流行的秘密

黄修源 / 机械工业出版社 / 2009-9 / 29.00

380万人为何会齐聚豆瓣? HIN1和SARS是如何传播扩散开的? 贾君鹏何以快速窜红网络? 通过创新扩散的理论的分析和说明,给出了所有这些问题的答案! 这本书从豆瓣的流行现象说开来,应用了创新扩散等传播学道理来解释了豆瓣如何流行起来,同时作者还同时用创新扩散的理论解释了为何会出现世界变平的现象,长尾理论,SARS病毒的高速传播等。 作者以前任豆瓣设计师的身份以自己亲......一起来看看 《豆瓣,流行的秘密》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器