簡體   English   中英

如何通過Haskell中的列表理解正確生成String列表?

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

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