String 如何在haskell中将字母组合成两个字符串

String 如何在haskell中将字母组合成两个字符串,string,haskell,char,list-comprehension,String,Haskell,Char,List Comprehension,我正在学习Haskell,并按照指南继续学习。我正处在这样一个点上,它显示: ghci> let nouns = ["hobo","frog","pope"] ghci> let adjectives = ["lazy","grouchy","scheming"] ghci> [adjective ++ " " ++ noun | adjective <- adjectives, noun <- nouns] ["lazy hobo","lazy fro

我正在学习Haskell,并按照指南继续学习。我正处在这样一个点上,它显示:

ghci> let nouns = ["hobo","frog","pope"]  
ghci> let adjectives = ["lazy","grouchy","scheming"]  
ghci> [adjective ++ " " ++ noun | adjective <- adjectives, noun <- nouns]  
["lazy hobo","lazy frog","lazy pope","grouchy hobo","grouchy frog",  
"grouchy pope","scheming hobo","scheming frog","scheming pope"]   
ghci>let名词=[“流浪汉”、“青蛙”、“教皇”]
ghci>let形容词=[“懒惰”、“不高兴”、“诡计多端”]

ghci>[形容词++“”++名词|形容词
++
仅适用于列表,但
x
y
仅是
Char
。毕竟,它们是
字符串的元素(=
[Char]
),而LYAH示例有
Char
列表:
[String]=[Char]

-- [a] -> [a] -> [a]
-- vv     vv
[y ++ ' ' ++ y | x <- "abd", y <- "bcd"]
--           ^   ^           ^
--           Char           Char

-- vs

--                                        [String]          [String]
--                                       vvvvvvvvvv          vvvvv
[adjective ++ " " ++ noun | adjective <- adjectives, noun <- nouns]  
-- ^^^^^^^           ^^^^
-- String           String
这里的实际问题是,您试图连接三个字符,而函数仅为项目列表定义。 将实际连接两个列表,而不是两个单独的项目,并给出一个列表

  • 因此,您可以通过将所有字符转换为字符串来修复程序,如下所示

    > [[x] ++ " " ++ [y] | x <- "ab", y <- "cd"]
    ["a c","a d","b c","b d"]
    
    > [[x] ++ (' ' : [y]) | x <- "ab", y <- "cd"]
    ["a c","a d","b c","b d"]
    
    > [[x, ' ', y] | x <- "ab", y <- "cd"]
    ["a c","a d","b c","b d"]
    
  • 或者,更简单、更直观地创建一个字符列表,如下所示

    > [[x] ++ " " ++ [y] | x <- "ab", y <- "cd"]
    ["a c","a d","b c","b d"]
    
    > [[x] ++ (' ' : [y]) | x <- "ab", y <- "cd"]
    ["a c","a d","b c","b d"]
    
    > [[x, ' ', y] | x <- "ab", y <- "cd"]
    ["a c","a d","b c","b d"]
    

    [[x',,y]| x我发现
    [x',,y]
    这里的视觉效果很好。
    > [[x, ' ', y] | x <- "ab", y <- "cd"]
    ["a c","a d","b c","b d"]