如何将函数应用于Haskell中列表中的每个元素?

Vin*_*hou 0 lambda haskell map-function

我想将resolve_on应用于列表c1中的每个元素,比如

for(Char c:c1){
resolve_on c c1 c2;}
Run Code Online (Sandbox Code Playgroud)

那么我怎样才能使用map函数呢?

resolvents :: [Char] -> [Char] -> [[Char]]
resolvents c1 c2 =  map (//what should I do) c1

resolve_on :: Char -> [Char] -> [Char] -> [Char]
resolve_on c c1 c2
Run Code Online (Sandbox Code Playgroud)

Wil*_*ess 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
Run Code Online (Sandbox Code Playgroud)

这确实是一个map,

                 = map (\c -> resolve_on c c1 c2) c1
Run Code Online (Sandbox Code Playgroud)

这使用lambda(即未命名的)函数,接收一个名为的参数c.

do评论中的代码也可以使用.它是do表示法,相当于列表理解.