如何将函数应用于 Haskell 列表中的每个元素?
how to apply function to every element in a list in Haskell?
我想将 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
如有疑问,请从列表理解开始:
-- 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
.[=16= 的参数]
评论中的do
代码也可以。它采用do
表示法,等同于列表理解。
我想将 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
如有疑问,请从列表理解开始:
-- 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
.[=16= 的参数]
评论中的do
代码也可以。它采用do
表示法,等同于列表理解。