Haskell编写一个函数来执行列表上的输入函数

时间:2017-02-21 08:20:29

标签: haskell

所以我正在尝试编写一个函数,在输入列表f ls上执行输入函数[l1, l2, ..., ln]并输出字符串"[" ++ (f l1) ++ "," ++ (f l2) ++ "," ++ ... ++ (f ln) ++ "]"

flist :: (a -> String) -> [a] -> String
flist f ls = 

例如:

>flist show [1, 2, 3]

会输出"[1, 2, 3]"

>flist (fun x -> x) ["dog"]

会输出"[dog]"

我尝试使用foldl'

flist f ls = "[" ++ (foldl' (++) f "," ls) ++ "]" 

似乎没有效果

2 个答案:

答案 0 :(得分:6)

提示:

  1. 首先生成[f x1,...,f xn],将f应用于每个成员。
  2. 然后,编写一个带[y1,...,yn]w的函数,并生成一个交错[y1,w,y2,w,...,yn]。这可以通过递归来完成。 (还有一个库函数,但它并不重要。)
  3. 撰写两者,获取[f x1, ",", ...],然后连接结果。
  4. 在结果字符串中添加括号。

答案 1 :(得分:5)

这个怎么样:

import Data.List

flist f list = "[" ++ (intercalate "," $ map f list) ++ "]"

intercalate将字符串放在其他字符串之间,(在这种情况下)是a slightly configurable version of unwords