"a" ++ "b" ++ "c" "abc" -- ord-6ren">
gpt4 book ai didi

haskell - Haskell 中的字符串连接和不需要的引号

转载 作者:行者123 更新时间:2023-12-02 18:46:36 25 4
gpt4 key购买 nike

出于效率考虑,我想使用 shows 连接一堆字符串(可能有很多字符串)。但是,当我这样做时,我得到了不需要的 " 字符:

Prelude> "a" ++ "b" ++ "c"
"abc" -- ordinary concatenation - expected result
Prelude> (shows "a" . shows "b" . shows "c") ""
"\"a\"\"b\"\"c\"" -- actual result

有人可以解释为什么会发生这种情况以及我应该如何使用 shows 函数实现 ++ 行为吗?

当我查看上述类型时(出于好奇),我得到了以下结果:

Prelude> :t ("a" ++ "b" ++ "c")
("a" ++ "b" ++ "c") :: [Char]
Prelude> :t ((shows "a" . shows "b" . shows "c") "")
((shows "a" . shows "b" . shows "c") "") :: String

在一种情况下的 [Char] 和在另一种情况下的 String 是否必须对 ++shows,即使 String 只是 [Char] 的别名?

最佳答案

请注意,显示“a”“\”a\“”show 的要点是使用 Read 打印 Haskell 可以将其解释为文字值的内容。因此,“显示”字符串意味着包含引号字符。相反,您可以使用 showChar 来构建如下列表:

> (showChar 'a' . showChar 'b' . showChar 'c') ""
"abc"
> length it -- `it` refers to the result of the last computation in GHCi
3

关于haskell - Haskell 中的字符串连接和不需要的引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29591787/

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