[英]How to properly generate a list of String through list comprehension in Haskell?
我需要使用列表理解來生成這樣的列表:[“ AaBB”,“ AbBB”,“ AcBB”,“ AdBB”,“ AeBB”,“ AfBB”,“ AgBB”]。 但是我一直在創建表達式來解決這個問題
我試圖創建一個列表,其中每個元素都是字符串連接,例如“ A” + x +“ BB”,其中x是從“ a”開始到“ g”結尾的字母范圍內的元素
module C where
genList :: [String]
genList = [ "A" ++ x ++ "BB" | x <- ["a" .. "g"]]
因此,我期望生成一個與問題中所要求清單相似的清單。 但是相反,我只是遇到了此編譯錯誤:
Prelude> :l exC
[1 of 1] Compiling C ( exC.hs, interpreted )
exC.hs:3:41: error:
• No instance for (Enum [Char])
arising from the arithmetic sequence ‘"a" .. "g"’
• In the expression: ["a" .. "g"]
In a stmt of a list comprehension: x <- ["a" .. "g"]
In the expression: ["A" ++ x ++ "BB" | x <- ["a" .. "g"]]
|
3 | genList = [ "A" ++ x ++ "BB" | x <- ["a" .. "g"]]
| ^^^^^^^^^^^^
Failed, no modules loaded.
您不能使用..
語法來構建字符串列表。 幸運的是,您在此處將其用於單字符字符串,因此您可以僅使用它來構建字符列表: [ "A" ++ x : "BB" | x <- ['a' .. 'g']]
[ "A" ++ x : "BB" | x <- ['a' .. 'g']]
String
不是Enum
類型類的實例。 嚴格來講, 可以使它成為一個實例,但這可能不會帶來太多好處。 如果按字典順序生成這些內容,則將生成"a"
, "a\\NUL"
, "a\\NUL\\NUL"
等。
您可能想在這里使用Char
演員,就像@JosephSible在他的回答中寫道:
[ 'A': x : "BB" | x <- ['a' .. 'g']]
或者我們可以在這里使用函子映射:
('A':) . (:"BB") <$> ['a' .. 'g']
這給我們:
Prelude> ('A':) . (:"BB") <$> ['a' .. 'g']
["AaBB","AbBB","AcBB","AdBB","AeBB","AfBB","AgBB"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.