簡體   English   中英

如何將字符串列表轉換為元組列表? (哈斯克爾)

[英]How to convert a list of Strings to a list of tuples? (Haskell)

我有一個字符串列表:學生,他們在某門課程中的成績,課程名稱。 我需要將列表中的每個字符串轉換為元組,因為它同時包含字符串和整數。

[“PHL 220 A 3 Ada Lovelace A”、“PHL 220 A 3 格蕾絲料斗 C”、“THE 105 A 3 格蕾絲料斗 B+”]

[("PHL",220,"A",3,"Lovelace, Ada",4.0), ("THE",105,"A",3,"Hopper, Grace",3.33)]

我試過這個,但它不起作用。

listToTuples :: [[String]] -> [(String | Integer)]
    listToTuples = map listToTuples

我對 Haskell 很陌生,所以語法很混亂。

您提供的嘗試中有很多錯誤。 幸運的是,這些錯誤大多是語法錯誤,您正在正確地解決問題。

讓我們逐行查看 go:

listToTuples :: [[String]] -> [(String | Integer)]

這幾乎是正確的,但是:

  • 您已將輸入類型指定為[[String]] — 即字符串列表的列表。 但是,您的輸入實際上是一個字符串列表——即[String]
  • (String | Integer)不正確的 Haskell 語法。 正確的語法是(String, Integer) Additionally, your output type is actually a tuple of a string, an integer, a string, an integer, a string, and an integer, which translates to (String, Int, String, Int, String, Int) . (如果您願意,可以使用Integer ,但這不是必需的;如果您有興趣,請在 Haskell 中搜索IntInteger之間的區別。)

把這些放在一起,你得到:

listToTuples :: [String] -> [(String, Int, String, Int, String, Int)]

也就是說, listToTuples ,給定一個字符串列表,將返回一個元組列表。 現在聽起來差不多!

現在,進入下一行:

    listToTuples = map listToTuples

你這里還有兩個錯誤:

  • 不要縮進,如果縮進這一行,Haskell 會將其解釋為上一行的延續。 這不應該是,(有關 Haskell 縮進的更多信息,請參閱https://en.wikibooks.org/wiki/Haskell/Indentation )。
  • 您正在根據listToTuples listToTuples 這不可能做任何事情,當編譯器嘗試運行您的代碼時,它將進入無限循環,為了運行listToTuples ,它將嘗試在列表中的每個元素上運行listToTuples ,這意味着它必須在其中的每個元素上運行listToTuples ,意思是……

幸運的是,您正在做一件事:您正在使用map ,正如您所注意到的, map正是解決此問題的正確工具。 因此,解決方案如下所示:

listToTuples :: [String] -> [(String, Int, String, Int, String, Int)]
listToTuples = map _

但是用_替換為 function 將String轉換為(String, Int, String, Int, String, Int) 我會讓你弄清楚 function 可能是什么。 (提示:使用遞歸查找空格之間的所有位,然后使用read將字符串轉換為數字。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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