所以我正在尝试编写一个函数,在输入列表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) ++ "]"
似乎没有效果
答案 0 :(得分:6)
提示:
[f x1,...,f xn]
,将f
应用于每个成员。[y1,...,yn]
和w
的函数,并生成一个交错[y1,w,y2,w,...,yn]
。这可以通过递归来完成。 (还有一个库函数,但它并不重要。)[f x1, ",", ...]
,然后连接结果。答案 1 :(得分:5)
这个怎么样:
import Data.List
flist f list = "[" ++ (intercalate "," $ map f list) ++ "]"
intercalate
将字符串放在其他字符串之间,(在这种情况下)是a slightly configurable version of unwords
。