Как можно упростить эту функцию?

Это функция:

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,

Другие вопросы по тегам