从书中学习了一个哈克尔,我发现isAlpha并isLetter检查一个角色是否是一个字母.
我在这里找到了一个问题和答案,其中说这两个函数之间没有区别.
现在,我想知道为什么要haskell两者兼顾?有历史原因吗?
我在这里找到了一个解释,它说保持两个都是为了向后兼容,但我不确定这是不是确切的原因.
有谁知道更多?
ymo*_*nad 10
注意:以下仅针对ghc
在ghc的源代码和Haskell Cafe存档的git日志中走动,我找到了一些信息来回答你的问题.虽然它不是一个直接的答案,并且充满了垃圾信息,但希望这会有所帮助.
isAlpha已于1996年纳入初步修订.
在2005年初,Dimitry Golubovsky发布了这个问题,关于ghc如何能够很好地支持unicode.他是unicode拥抱的开发者之一.也许他想增强ghc的unicode支持.
后来他离开了这个帖子
之前(即直到并包括6.4),Unicode内容通过基于wc*locale的函数进行处理,以进行宽字符转换.因为并非每次安装Unix(或其他一些操作系统)都能正确设置(我的不是:个人痒),所以这段代码是为GHC提出的,并最终在那里完成.
为了提高unicode的,一些功能如的支持isLetter,isMark,isNumber,...,在加入这个承诺.提交的评论说:
添加Dimitry Golubovsky的Unicode字符类实现.这将消除对libc语言环境代码的依赖,并为跨平台的Unicode提供更一致的支持.
并在 Unicode.hs
这些是从Hugs Unicode.hs复制的
两天后,这个提交添加了这两个评论.
-- This function is equivalent to 'Data.Char.isAlpha'.
isLetter :: Char -> Bool
-- This function is equivalent to 'Data.Char.isLetter'.
isAlpha :: Char -> Bool
Run Code Online (Sandbox Code Playgroud)
我找不到添加此注释的原因,但我的假设是 - 因为isAlpha似乎已经支持unicode,所以这两个函数都被认为是等价的.
isAlpha是最古老的,isLetter后来加入了一些其他unicode函数,这些函数是从拥抱中获取的,所以也许没有理由只isLetter从函数集中删除.我没有足够的时间进一步调查,但我写了我研究的所有信息.
| 归档时间: |
|
| 查看次数: |
557 次 |
| 最近记录: |