我對 Haskell 很陌生,我正在嘗試過濾包含字串和字串串列的元組串列。我想根據字串串列是否包含某個字串進行過濾。我想創建一個串列串列,其中每個串列是每個元組的第一個元素,該元素對過濾器的計算結果為 true。
示例:
給定這個元組串列
progLanguages =
[ ("CptS121" , ["C"]),
("CptS122" , ["C "]),
("CptS223" , ["C "]),
("CptS233" , ["Java"]),
("CptS321" , ["C#","Java"]),
("CptS322" , ["Python","JavaScript"]),
("CptS355" , ["Haskell", "Python", "PostScript", "Java"]),
("CptS360" , ["C"]),
("CptS370" , ["Java"]),
("CptS315" , ["Python"]),
("CptS411" , ["C", "C "]),
("CptS451" , ["Python","C#", "SQL","Java"]),
("CptS475" , ["Python", "R"])
]
我想過濾包含 ["Python","C","C "] 的元組并創建一個串列串列,其中每個子串列是使用每種語言的課程。
因此, ["Python","C","C "] 將輸出 [ ["CptS322","CptS355","CptS315","CptS451","CptS475"], ["CptS121","CptS360"," CptS411"], ["CptS122","CptS223","CptS411"] ]
到目前為止,我有以下內容:
filter_courses [] courses = []
filter_courses list [] = []
filter_courses list courses = map snd (filter ((`elem` courses).fst) list)
這將過濾 progLanguages 并輸出使用“課程”中列出的任何語言的所有元組的串列。
從上面的串列中獲取輸出,我正在嘗試執行以下操作...
filter_more [] langs = []
filter_more list [] = []
filter_more list langs = map fst (filter ((`elem` langs).snd) list)
這將輸出使用任何語言的所有課程的串列,而不是每種語言的課程串列。
uj5u.com熱心網友回復:
以下情況如何:
progLanguages = [ ("CptS121", ["C"])
, ("CptS122", ["C "])
, ("CptS223", ["C "])
, ("CptS233", ["Java"])
, ("CptS321", ["C#","Java"])
, ("CptS322", ["Python","JavaScript"])
, ("CptS355", ["Haskell", "Python", "PostScript", "Java"])
, ("CptS360", ["C"])
, ("CptS370", ["Java"])
, ("CptS315", ["Python"])
, ("CptS411", ["C", "C "])
, ("CptS451", ["Python", "C#", "SQL","Java"])
, ("CptS475", ["Python", "R"])
]
filterCourses :: Eq a => [a] -> [(b, [a])] -> [[b]]
filterCourses langs courses = map coursesUsing langs
where coursesUsing lang = map fst . filter (elem lang . snd) $ courses
main = do
print $ filterCourses [] progLanguages
-- []
print $ filterCourses ["Python","C","C "] progLanguages
-- [["CptS322","CptS355","CptS315","CptS451","CptS475"],["CptS121","CptS360","CptS411"],["CptS122","CptS223","CptS411"]]
我將任務分為兩個步驟:首先,我創建了一個函式coursesUsing,列出了給定語言的課程。然后我使用map.
或者,使用串列推導:
filterCourses langs courses = [[course | (course, langs) <- courses, lang `elem` langs] | lang <- langs]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/432683.html
