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

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

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

查看所有标签

猜你喜欢:

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

链接

链接

[美]艾伯特-拉斯洛•巴拉巴西 (Albert-László Barabási) / 沈华伟 / 浙江人民出版社 / 2013-8-1 / 59.90元

[内容简介] ★《链接》是《爆发》的作者,艾伯特-拉斯洛•巴拉巴西的成名之作,同时也是复杂网络的奠基之作,社交网络的入门之作。巴拉巴西之前,随机网络理论一直主导者我们的网络思维,是巴拉巴西第一个证明了,我们不是生活在随机世界里,真实网络是无尺度的。 ★巴拉巴西在书中追溯了网络的数学起源,分析了社会学家在此基础上得出的研究成果,最后提出自己的观点:我们周围的复杂网络,从鸡尾酒会、恐怖组织......一起来看看 《链接》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具