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

时间:2018-08-18 15:14:39

标签: haskell lambda map-function

我想将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

1 个答案:

答案 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表示法,等效于列表理解。