Я хочу написать функцию, которая принимает математическую функцию (/, x, +, -), число для начала и список чисел. Затем он должен вернуть список.
Первый элемент - это начальный номер, второй - значение начального номера плюс / минус / раз /, деленное на первый номер заданного списка. Третий элемент - это результат предыдущего результата плюс / минус / раз /, разделенный на второй результат данного списка и т. Д.
Я получил все для работы, если я скажу коду, какую функцию использовать, но если я хочу позволить пользователю вводить математическую функцию, которую он хочет, возникают проблемы с типами. Попытка: t (/), например, выдает Fractional a => a -> a -> a
, но если вы положите это в начало ваших типов, это не удастся.
Существует ли определенный тип для различения этих функций (/, x, +, -)? Или есть другой способ успешно написать эту функцию?
prefix :: (Fractional a, Num a) => a -> a -> a -> a -> [a] -> [a]
prefix (f) a b = [a] ++ prefix' (f) a b
prefix' :: (Fractional a, Num a) => a -> a -> a -> a -> [a] -> [a]
prefix' (z) x [] = []
prefix' (z) x y = [x z (head y)] ++ prefix' (z) (head (prefix' (z) x y)) (tail y)
Правильное решение будет примерно таким:
prefix (-) 0 [1..5]
[0,-1,-3,-6,-10,-15]