Haskell 中转义的符号是什么意思?
What does an escaped ampersand mean in Haskell?
我查看了 Haskell 2010 报告并注意到一个奇怪的转义序列和符号:\&
。我找不到这个转义序列代表什么的解释。它也可能只位于字符串中。我在 GHCi 中尝试了 print "\&"
,它打印了一个空字符串。
它转义了……没有字符。 "break" 一些转义序列很有用。例如
我们可能希望将 "" ++ "3"
表示为单个字符串文字。如果我们尝试明显的方法,我们得到
"3" ==> "{"
但是我们可以使用
"\&3"
达到预期结果。
此外,"\SOH"
和 "\SO"
都是有效的单个 ASCII 字符转义,使得 "\SO" ++ "H"
难以表达为单个文字:为此我们需要 "\SO\&H"
。
这个转义技巧也被标准 Show String
实例所利用,它必须产生有效的文字语法。我们可以在 GHCi 中看到这一点:
> "0" ++ "0"
"0\&0"
> "\SO" ++ "H"
"\SO\&H"
此外,这极大地帮助了旨在生成 Haskell 代码(例如元编程)的外部程序。当为字符串文字发出字符时,外部程序可以在可能有歧义的转义符(甚至所有转义符)的末尾添加 \&
,这样程序就不必处理不需要的交互。例如。如果程序现在想发出 </code>,它可以发出 <code>\&
并且可以自由发出任何作为下一个字符。否则,程序应该记住,当发出下一个字符时,如果它是数字,则必须在前面加上 \&
。总是添加 \&
更简单,即使不需要:\&A
是合法的,并且与 A
.
具有相同的含义
最后,引自 Haskell 报告,解释 \&
:
2.6 Character and String Literals
[...]
Consistent with the "maximal munch" rule, numeric escape characters in strings consist of all consecutive digits and may be of arbitrary length. Similarly, the one ambiguous ASCII escape code, "\SOH"
, is parsed as a string of length 1. The escape character \&
is provided as a "null character"
to allow strings such as "7\&9"
and "\SO\&H"
to be constructed (both of length two). Thus "\&"
is equivalent to ""
and the character '\&'
is disallowed. Further equivalences of characters are defined in Section 6.1.2.
我查看了 Haskell 2010 报告并注意到一个奇怪的转义序列和符号:\&
。我找不到这个转义序列代表什么的解释。它也可能只位于字符串中。我在 GHCi 中尝试了 print "\&"
,它打印了一个空字符串。
它转义了……没有字符。 "break" 一些转义序列很有用。例如
我们可能希望将 "" ++ "3"
表示为单个字符串文字。如果我们尝试明显的方法,我们得到
"3" ==> "{"
但是我们可以使用
"\&3"
达到预期结果。
此外,"\SOH"
和 "\SO"
都是有效的单个 ASCII 字符转义,使得 "\SO" ++ "H"
难以表达为单个文字:为此我们需要 "\SO\&H"
。
这个转义技巧也被标准 Show String
实例所利用,它必须产生有效的文字语法。我们可以在 GHCi 中看到这一点:
> "0" ++ "0"
"0\&0"
> "\SO" ++ "H"
"\SO\&H"
此外,这极大地帮助了旨在生成 Haskell 代码(例如元编程)的外部程序。当为字符串文字发出字符时,外部程序可以在可能有歧义的转义符(甚至所有转义符)的末尾添加 \&
,这样程序就不必处理不需要的交互。例如。如果程序现在想发出 </code>,它可以发出 <code>\&
并且可以自由发出任何作为下一个字符。否则,程序应该记住,当发出下一个字符时,如果它是数字,则必须在前面加上 \&
。总是添加 \&
更简单,即使不需要:\&A
是合法的,并且与 A
.
最后,引自 Haskell 报告,解释 \&
:
2.6 Character and String Literals
[...]
Consistent with the "maximal munch" rule, numeric escape characters in strings consist of all consecutive digits and may be of arbitrary length. Similarly, the one ambiguous ASCII escape code,
"\SOH"
, is parsed as a string of length 1. The escape character\&
is provided as a"null character"
to allow strings such as"7\&9"
and"\SO\&H"
to be constructed (both of length two). Thus"\&"
is equivalent to""
and the character'\&'
is disallowed. Further equivalences of characters are defined in Section 6.1.2.