Haskell函数,将输入作为字符串,并以相反的顺序返回相同的字符序列

时间:2018-10-07 15:03:45

标签: haskell

问题是,我在做

reverse ("Hello how are you") 并得到如下输出:"uoy era woh olleh" 但预期的输出是:uoy era woh olleh

不确定如何从上述字符串中删除引号(“)。

1 个答案:

答案 0 :(得分:5)

我假设您是指此:

GHCi, version 8.2.1: http://www.haskell.org/ghc/  :? for help
Loaded GHCi configuration from /home/sagemuej/.ghci
Loaded GHCi configuration from /home/sagemuej/.ghc/ghci.conf
Prelude> reverse "Hello how are you"
"uoy era woh olleH"

...实际上,您希望收到不带任何引号的答复。好吧,GHCi将所有评估结果通过print传递,而Show typeclass则使用putStrLn将任何值转换为字符串-特别是一个有效的Haskell源代码字符串,并且因此可以用来重新创建值。 (这在原型制作中非常有用,它不仅限于字符串,还可以处理各种其他类型。)

现在,"uoy era woh olleH"显然是有效的Haskell源代码

Prelude> "uoy era woh olleH"
"uoy era woh olleH"

但没有引号就不会:

Prelude> uoy era woh olleH

<interactive>:3:1: error:
    Variable not in scope: uoy :: t0 -> t1 -> t2 -> t

<interactive>:3:5: error: Variable not in scope: era

<interactive>:3:9: error: Variable not in scope: woh

<interactive>:3:13: error: Variable not in scope: olleH

这就是GHCi这样做的原因。但是,如果您不想将回复用作Haskell代码,则也不需要show包装器。要仅打印字符串的原始内容,您需要明确使用IO操作,其目的是:https://developer.salesforce.com/page/Adobe_XFDF

Prelude> putStrLn $ reverse "Hello how are you"
uoy era woh olleH

(如果您还不知道$是什么,请以putStrLn (reverse "Hello how are you")的简写形式阅读。)