Как можно упростить эту функцию?
Это функция:
f [] = []
f (h:t) = (\x -> x - h) : f t
Он берет список и возвращает список анонимных функций, которые вычитают каждый элемент из x.
Видимо, есть какой-то способ написать всю эту функцию в 20 символов или меньше.
Я пытался сделать это с map
но это просто применяет функцию к каждому элементу списка. Я также попытался заменить анонимную функцию (-a)
что тоже не сработало.
У кого-нибудь есть идея?
1 ответ
Вы можете просто использовать:
f :: Num a => [a] -> [a -> a]
f = map subtract
поскольку subtract :: Num n => n -> n -> n
Таким образом, это означает, что мы отображаем каждый элемент h
из списка в функцию subtract h
, вычитать h
вычитает h
от любого заданного значения x
, Так subtract h x == x - h
,