列表中字符串的串联

meh*_*ix_ 0 haskell

我必须将两个字符串作为输入汇入一个单个字符串并将其作为输出放在列表中

type Language = [String]
cat :: Language -> Language -> Language
cat l1 l2  = 
    case l1 of 
    [""] -> l2
    (x:xs) -> case l2 of 
              [""] -> l1
              (y:ys) -> xs ++ ys
Run Code Online (Sandbox Code Playgroud)

输出应该是:

["string1string2"]
Run Code Online (Sandbox Code Playgroud)

哈斯克尔的任何想法?

Car*_*arl 5

鉴于您确切的问题规范,它解决了

concatWithinLists :: [String] -> [String] -> [String]
concatWithinLists [x] [y] = [x ++ y]
Run Code Online (Sandbox Code Playgroud)

这在各方面都很糟糕.所有这些都源于你的坚持,你只会拥有完全长度为1的列表,完全忽略了列表的重点.

我强烈建议您重新考虑导致您遇到此问题的所有问题.真正的问题不在这里 - 它在你设计的某个地方更高.只要您对类型系统撒谎了解数据内容,它就会继续成为问题.你没有和[String]你一起工作,你正在使用String并附加了一些噪音,没有任何好处.

  • @mehidx_这个简单的术语:如果你希望你的列表只有一个元素那么你真的需要使用一个列表吗?简单地声明`type Language = String`. (4认同)