2012-02-07 98 views
9
let ans = stringConcat ["<a href=","\"",str,"\"",">",strr,"</a>"] 
       putStr ("\nOutput :" ++show (ans)) 

當我打印這個答案是Output :"<a href=\"www.test.com\">testing</a>" 我想知道爲什麼額外\正在打印。\"假設是對雙引號換碼。再次它打印既\",我想知道爲什麼出現這種情況,是有什麼辦法可以把"是側一串..?轉義碼「打印兩個」。反正把一個「爲字符串?

concat函數

stringConcat::[String]->String 
stringConcat xs= concat xs 
+2

你不需要特殊的'stringConcat'版本字符串。 'concat'可以直接使用。 – 2012-02-07 09:35:06

回答

18

是的,\"是雙引號的正確轉義碼,所以字符串ans包含雙引號如您所料。

問題是,你使用的是show,它是一個函數,用於顯示它們在Haskell代碼中出現的值,這意味着它們中帶有雙引號的字符串必須被轉義。

> putStrLn (show "I said \"hello\".") 
"I said \"hello\"." 

所以,如果你不想說,只是不使用show

> putStrLn "I said \"hello\"." 
I said "hello". 
+0

什麼奇怪的是,用show \當一個單引號逃逸的作品」只是不適合\」。 – bshields 2013-06-08 16:45:19

+0

對不起,我沒有實際編寫樣本。我看到的是,轉義工作正如對單引號的預期那樣,但不是雙引號。在ghci提示符處鍵入'「\」「'會產生'」\「」',但是「\'」'yield '「「」' – bshields 2013-06-08 16:55:59

+0

啊我明白了,謝謝你的澄清 – bshields 2013-06-08 16:57:17

1

你爲什麼不試試這個

let ans = stringConcat ["<a href=","'",str,"'",">",strr,"</a>"] 
+1

我需要雙引號不是單一 – Gihan 2012-02-07 10:00:45

6

請勿show a字符串。

let ans = stringConcat ["<a href=","\"",str,"\"",">",strr,"</a>"] 
putStr ("\nOutput :" ++ ans) 

另外,什麼是stringConcat

+0

明白了... stringConcat是concat函數 – Gihan 2012-02-07 10:01:05