[英]concatenation of string within lists
我必須將輸入的兩個字符串合並為一個單一字符串,並將其放在列表中作為輸出
type Language = [String]
cat :: Language -> Language -> Language
cat l1 l2 =
case l1 of
[""] -> l2
(x:xs) -> case l2 of
[""] -> l1
(y:ys) -> xs ++ ys
輸出應為:
["string1string2"]
在haskell中有任何想法嗎?
根據您的確切問題說明,可以通過以下方式解決
concatWithinLists :: [String] -> [String] -> [String]
concatWithinLists [x] [y] = [x ++ y]
這在所有方面都是不好的。 所有這些都是由於您堅持只擁有長度完全為1的列表,而完全遺漏了列表的要點。
我強烈建議您重新考慮所有導致此問題的原因。 真正的問題不在這里-它在您的設計中更高。 只要您對數據內容使用類型系統,這將仍然是一個問題。 您沒有使用[String]
,而是使用String
並附加了一些噪音,沒有任何好處。
為什么要在列表中傳遞字符串? 這樣做會帶來問題,例如您的代碼崩潰應將空列表作為參數給出( cat [""] []
除外)。 另外,您的模式匹配已關閉:當單例列表作為參數傳遞時, xs ++ ys
變為[] ++ []
。 這是因為[x] = x:[]
。 一個更簡單的解決方案是:
cat :: String -> String -> [String]
cat s1 s2 = [s1 ++ s2]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.