这段代码出了什么问题?
Prelude> let xᵀ = "abc"
<interactive>:10:6: lexical error at character '\7488'
根据我对Haskell 2010 report的解读,任何大写或小写的Unicode字母在变量名的末尾都应该有效。 ᵀ
字符(MODIFIER LETTER CAPITAL T)是否不符合大写Unicode字母的条件?
是否有更好的角色来表示矢量的转置?因为我正在评估一个密集的数学公式,所以我想保持简洁。
我正在运行GHC 7.8.3。
答案 0 :(得分:8)
大写Unicode字母在Unicode字符类别Letter,大写[Lu]。
中小写Unicode字母在Unicode字符类别Letter,Lowercase [Ll]。
中MODIFIER LETTER CAPITAL T是Unicode字符类别Letter,Modifier [Lm]。
我倾向于坚持ASCII,所以我可能只使用xTrans
或x'
之类的名称,具体取决于它在范围内的行数。
答案 1 :(得分:8)
不属于ANY类别的字符在Haskell程序中无效,应该会导致错误。
,其中
ANY → graphic | whitechar
graphic → small | large | symbol | digit | special | " | '
small → ascSmall | uniSmall | _<br>
ascSmall → a | b | … | z<br>
uniSmall → any Unicode lowercase letter
...
uniDigit → any Unicode decimal digit
...
像ᵀ
这样的修饰符字母根本不是合法的Haskell。 (与Number, Other category中的子或上标数字不同,因此a₁
的处理方式与a1
非常相似。)
我喜欢使用非ASCII Unicode,因为它有助于提高可读性,但是除非你已经为使用它指定了素数符号的其他含义,否则它应该没问题。