首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell新线路不工作

Haskell新线路不工作
EN

Stack Overflow用户
提问于 2015-03-17 00:04:17
回答 2查看 5K关注 0票数 1

混乱了大约20分钟,现在试图使新的线工作,但它总是显示在GHCI作为一个单行。

下面是我在GHCi中输入的内容:

代码语言:javascript
复制
displayFilm ("Skyfall",["Daniel Craig", "Judi Dench", "Ralph Fiennes"], 2012, ["Bill", "Olga", "Zoe", "Paula", "Megan", "Sam", "Wally"])

以下是印刷的内容:

"Skyfall----------\n Cast: Daniel Craig, Judi Dench, Ralph Fiennes\n Year: 2012\n Fans: 7\n"

代码语言:javascript
复制
displayList :: [String] -> String
displayList [] = ""
displayList [x] = x ++ "" ++  displayList []
displayList (x:xs) = x ++ ", " ++ displayList xs


displayFilm :: Film -> String
displayFilm (title, cast, year, fans) = 
    title ++ "----------" ++
    "\n Cast: " ++ (displayList cast) ++
    "\n Year: " ++ (show year) ++
    "\n Fans: " ++ show (length fans) ++ "\n"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-17 00:06:18

若要打印字符串本身,而不转义特殊字符,请使用:

代码语言:javascript
复制
putStr string

代码语言:javascript
复制
putStrLn string

如果你想在最后多换一行的话。在你的例子中,你可能是在寻找

代码语言:javascript
复制
putStr (displayFilm (....))

为什么需要这个?在GHCi中,如果计算表达式s,结果将被打印为运行print s (除非它有IO something类型--忘记这个特殊情况)。如果e是字符串,则print转义所有特殊字符并输出结果。这是因为print的意思是输出一个字符串,其语法遵循Haskell表达式中的语法。对于数字,这是通常的十进制表示法。对于字符串,我们得到引号和转义字符。

票数 4
EN

Stack Overflow用户

发布于 2015-03-17 00:10:16

当您在GHC中键入表达式时,它将使用print显示表达式。对字符串调用print显示其内容,但不计算转义序列:

代码语言:javascript
复制
> print "line1\nline"
"line1\nline2"

注意引号。

若要按需要显示字符串,请使用putStrputStrLn (后者将追加换行符)。

代码语言:javascript
复制
> putStr "line1\nline2"
line1
line2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29089117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档