内容简介:翻译自:https://stackoverflow.com/questions/4294652/haskell-want-a-better-way-of-doing-value-x-value-y
的新手,很抱歉,如果这非常明显……
我已经做了以下函数(这里用作例子来询问多个值== 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 ||》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 想要了解推荐系统?看这里!(2)——神经网络方法
- 调查显示雇主想要 JavaScript 而开发者想要 Python
- 前端想要了解的Nginx
- 如何搜索你想要的R包?
- 抖音推新品“抖店”:想要导流线下
- 想要做读写分离,送你一些小经验
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!