2011-04-24 31 views
0

我該如何運行列表併爲每個元素返回一些內容?如何遍歷列表併爲每個條目返回一些字符串?

這裏有一個小例子:

stack = [("ax","bx"),("cx","dx")] 

test :: [(String, String)] -> String 
test [] = "" 
test (x:xs) = do 
    reverse (fst x) 
    test xs 

我怎樣才能讓這個?

+1

這個問題很不清楚。你能舉例輸出嗎?用法示例? – luqui 2011-04-24 08:57:37

回答

3

我不太清楚你想要做什麼。如果你想扭轉每個元組的第一個元素,並以列表返回結果:

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

0
test :: [(String, String)] -> String 
test = foldr (\x r -> reverse (fst x) ++ r) "" 

+2

人們真的很喜歡'foldr'出於某種原因。你知道'foldr(\ xr - > f x ++ r)[] = map f' right? – luqui 2011-04-24 08:59:04

+1

'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

+1

@hoha,還有'concat',就此而言'concatMap'。 – dave4420 2011-04-24 09:36:23

3
test = concatMap (reverse . fst) 
相關問題