我看了Haskell 2010的报告,发现了一个奇怪的逃逸序列,其中有一个符号:\&。我找不到一个解释这个逃逸序列代表什么。它也可能只位于字符串中。我尝试了print "\&" in GHCi,它打印了一个空字符串。
发布于 2019-07-09 22:51:48
它逃脱了..。没有性格。它是有用的“打破”一些转义序列。例如,我们可能希望将"\12" ++ "3"表示为单个字符串文本。如果我们尝试明显的方法,我们就会得到
"\123" ==> "{"然而,我们可以使用
"\12\&3"为了预期的结果。
另外,"\SOH"和"\SO"都是有效的单个ASCII字符转义,使得"\SO" ++ "H"很难用单个文字来表示:我们需要"\SO\&H"。
标准Show String实例也利用了这个转义技巧,该实例必须生成有效的文字语法。我们可以在GHCi中看到这一点:
> "\140" ++ "0"
"\140\&0"
> "\SO" ++ "H"
"\SO\&H"此外,这极大地帮助了旨在生成Haskell代码(例如元编程)的外部程序。当为字符串文本发出字符时,外部程序可以在可能不明确的转义符(甚至所有转义符)的末尾添加\&,这样程序就不必处理不必要的交互。例如,如果程序现在想要发出\12,它可以发出\12\&,并且可以作为下一个字符自由地发出任何内容。否则,程序应该记住,当发出下一个字符时,如果它是一个数字,则必须由\&加码。即使不需要添加\&,始终添加它也更简单:\12\&A是合法的,具有与\12A相同的含义。
最后,引用Haskell报告,解释\&
2.6字符和字符串文字 ..。 与“最大咀嚼”规则一致,字符串中的数字转义字符由所有连续数字组成,可以是任意长度的。类似地,一个模棱两可的ASCII转义代码
"\SOH"被解析为长度为1的字符串。转义字符\&作为一个"null character"提供,以允许构造诸如"\137\&9"和"\SO\&H"这样的字符串(都是长度2)。因此,"\&"等同于"",字符'\&'是不允许的。第6.1.2节进一步定义了字符的等价物。
https://stackoverflow.com/questions/56961342
复制相似问题