簡體   English   中英

列表中字符串的串聯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM