我想知道,如果这个
alph = ['a'..'z']
给我回报
“ABCDEFGHIJKLMNOPQRSTUVWXYZ”
我怎样才能返回法语字母?我可以通过某种方式传递语言环境吗?
更新 好吧)我知道英语和法语有相同的字母。但我的观点是,如果它们不一样,但以A开头,以Z结尾。很高兴有人类语言范围的支持。
至少某些语言带有本地化支持。
(只是尝试Haskell,读一本书)
答案 0 :(得分:15)
Haskell Char
值不是真实字符,它们是Unicode代码点。在其他一些语言中,它们的原生字符类型可能代表其他东西,如ASCII字符或“代码页whatsitsnumber”字符,甚至可以在运行时选择,但不能在Haskell中选择。
由于历史原因,范围'a'..'z'
与英文字母一致,包括Unicode和ASCII,以及从ASCII派生的字符集(如ISO8859-X)。没有通常支持的编码字符集,其中一些连续的代码范围与法语字母表一致。也就是说,如果你用变音符号作为单独的字母来计算字母。公认的做法似乎排除了带有变音符号的字母,因此法语字母与英语一致,但对于其他拉丁字母的字母表则不然。
为了获得除英语以外的大多数字母表,需要手动明确枚举字符,而不是任何范围表达式。对于某些语言,甚至不能使用Char
来表示所有字母,因为其中一些字母需要多个代码点,例如匈牙利语“ly”或西班牙语“ll”(2010年之前)或荷兰语“ij”(根据对某些当局 - 没有一个普遍接受的定义。)
我所知道的语言不支持任意人字母作为开箱即用的范围表达式。
答案 1 :(得分:2)
虽然编程语言通常支持按当前语言环境排序(只需在Hackage上搜索collate
),但我知道没有库提供按语言环境排列的字母字符列表。
现代(Unicode)系统允许本地化字符尝试也允许许多非拉丁字母,因此有很多字母字符。
枚举Unicode中的所有字母字符可提供超过40k个字符:
GHCi> length $ filter Data.Char.isAlpha $
map Data.Char.chr [0..256*256]
48408
虽然我知道libraries allowing to construct alphabetic indices,但我不知道有关此功能的任何Haskell绑定。