2017-02-21 10 views
2

Так что я пытаюсь написать функцию, которая выполняет функцию входного f на входном списке ls[l1, l2, ..., ln] и вывод в виде строки "[" ++ (f l1) ++ "," ++ (f l2) ++ "," ++ ... ++ (f ln) ++ "]"Haskell написать функцию для выполнения функции входа в списке

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) ++ "]" 

, который не кажется, работает

ответ

6

Подсказка:

  1. Produce [f x1,...,f xn] первых, применяя f к каждому член.
  2. Затем введите функцию, которая принимает [y1,...,yn] и w и производит чередование [y1,w,y2,w,...,yn]. Это можно сделать путем рекурсии. (Для этого также есть функция библиотеки, но это не важно.)
  3. Составьте оба, чтобы получить [f x1, ",", ...], а затем объедините результат.
  4. Добавить скобки к полученной строке.