我想将resolve_on应用于列表c1中的每个元素,例如
for(Char c:c1){
resolve_on c c1 c2;}
那么我该如何使用地图功能呢?
resolvents :: [Char] -> [Char] -> [[Char]]
resolvents c1 c2 = map (//what should I do) c1
resolve_on :: Char -> [Char] -> [Char] -> [Char]
resolve_on c c1 c2
答案 0 :(得分:5)
如有疑问,请从列表理解开始:
-- for (Char c) in c1: do { c <- c1
-- yield (resolve_on c c1 c2) ; return (resolve_on c c1 c2) }
resolvents c1 c2 = [ resolve_on c c1 c2 | c <- c1 ]
-- read it: a list of
-- (resolve_on c c1 c2)
-- for -- or: for every
-- c
-- in c1
这确实是map
,
= map (\c -> resolve_on c c1 c2) c1
这使用了 lambda (即未命名的)函数,并接收了一个名为c
的参数。
注释中的do
代码也可以使用。它用do
表示法,等效于列表理解。