我該如何運行列表併爲每個元素返回一些內容?如何遍歷列表併爲每個條目返回一些字符串?
這裏有一個小例子:
stack = [("ax","bx"),("cx","dx")]
test :: [(String, String)] -> String
test [] = ""
test (x:xs) = do
reverse (fst x)
test xs
我怎樣才能讓這個?
我該如何運行列表併爲每個元素返回一些內容?如何遍歷列表併爲每個條目返回一些字符串?
這裏有一個小例子:
stack = [("ax","bx"),("cx","dx")]
test :: [(String, String)] -> String
test [] = ""
test (x:xs) = do
reverse (fst x)
test xs
我怎樣才能讓這個?
我不太清楚你想要做什麼。如果你想扭轉每個元組的第一個元素,並以列表返回結果:
stack = [("ax","bx"),("cx","dx")]
test :: [(String, String)] -> [String]
test [] = []
test (x:xs) = reverse (fst x) : test xs
如果你想要的結果作爲一個字符串,請嘗試:
stack = [("ax","bx"),("cx","dx")]
test :: [(String, String)] -> String
test [] = ""
test (x:xs) = reverse (fst x) ++ test xs
要應用功能列表中的每個元素,你可能也想看看map
。
test :: [(String, String)] -> String
test = foldr (\x r -> reverse (fst x) ++ r) ""
?
人們真的很喜歡'foldr'出於某種原因。你知道'foldr(\ xr - > f x ++ r)[] = map f' right? – luqui 2011-04-24 08:59:04
'refr(\ xr→reverse(fst x)++ r)「」[(「12」,「13」),(「324」,「56」)]'=>「21423」。 map(\ x - > reverse(fst x))[(「12」,「13」),(「324」,「56」)]'=> [「21」,「423」]。 '++'不是':' – hoha 2011-04-24 09:16:33
@hoha,還有'concat',就此而言'concatMap'。 – dave4420 2011-04-24 09:36:23
test = concatMap (reverse . fst)
這個問題很不清楚。你能舉例輸出嗎?用法示例? – luqui 2011-04-24 08:57:37