gpt4 book ai didi

haskell - 当字符串中有撇号时,Words 会返回错误的输出

转载 作者:行者123 更新时间:2023-12-03 20:24:08 25 4
gpt4 key购买 nike

我正在尝试将字符串拆分为单词列表split_string :: String -> [Word]split_string x = words x “函数式编程很有趣,不是吗?”应该还给我:
[“功能”,“编程”,"is",“有趣”,“不是”,“它?”]
但它返回给我这个:
[“功能”,“编程”,"is",“有趣”,“isn\8217t”,“它?”]
如何避免撇号问题?
如果这是一个愚蠢的问题,我是 Haskell 的新手,所以提前抱歉。

最佳答案

关于 Haskell 的 Show 有一个常见的误解机制是为了。许多初学者认为它应该产生漂亮的可视化,但实际上它的目的是专门生成有效的 Haskell 代码表示。
这特别意味着它们不应该包含在您将其复制并粘贴回 Haskell 文件时会导致错误的内容。例如,考虑字符串 you tried to show "something" on the terminal .如果 GHCi 将其显示为

"you tried to show "something" on the terminal"
这会导致解析错误。引号需要转义:
"you tried to show \"something\" on the terminal"
这就是 Show String 的形式实例生成。
通常,表示不是唯一的。例如
"you tried to show \34something\34 on the terminal"
也可以,其中 \34" 的 ASCII 字符代码象征。这种形式实际上可以用于任何字符:
Prelude> "\72\101\108\108\111\44\32\87\111\114\108\100"
"Hello, World"
当然,对所有字符都这样做很愚蠢,但是 Haskell 标准在所有非 ASCII 字符都以转义方式显示的意义上安全地播放:
Prelude> "Amila Bečirović"
"Amila Be\269irovi\263"
优点是您可以避免不兼容的字符编码可能引入的怪癖——在 2000 年代初期,当网页使用特定于语言的 8 位编码时,这种情况经常发生。现在这个 shouldn't really be an issue anymore .
正如 Willem Van Onsem 所写,你总是可以使用 putStrLn 来原始转储一个字符串。 ,它不会转义任何东西——尽管这并不直接适用于字符串列表。
为了获得更大的灵活性,您可以选择不同的 Show没有这种行为的类,例如来自 pragmatic-show package :
Prelude> import qualified Text.Show.Pragmatic as SP
Prelude SP> SP.print ["Functional","Programming","is","Fun,","isn’t","it?"]
["Functional","Programming","is","Fun,","isn’t","it?"]
Prelude SP> SP.print "Amila Bečirović"
"Amila Bečirović"
请注意,这仍然会转义真正不安全的字符:
Prelude SP> SP.print "bla\34blub"
"bla\"blub"

关于haskell - 当字符串中有撇号时,Words 会返回错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64598905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com