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

查看所有标签

猜你喜欢:

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

The Big Red Fez

The Big Red Fez

Seth Godin / Free Press / 2002-01-15 / USD 11.00

YOUR WEB SITE IS COSTING YOU MONEY. IT'S ALSO FILLED WITH SIMPLE MISTAKES THAT TURN OFF VISITORS BEFORE THEY HAVE A CHANCE TO BECOME CUSTOMERS. According to marketing guru Seth Godin, a web s......一起来看看 《The Big Red Fez》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

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

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具