1
я преуспела с одним методом:Как рассчитать степенную функцию путем построения списка с к элементам, все будучи п, а затем с помощью функции продукта
power1 :: Integer -> Integer -> Integer
power1 n k | k < 0 = error "power not defined for negative exponent"
| otherwise = product (replicate (fromInteger k) n)
Но как вы это делаете с список внутри функции? Я пытался решить это часами, но я не могу это понять.
power1 :: Integer -> Integer -> Integer
power1 n k=product
Спасибо, это сработало. Это было гораздо менее сложно, чем я думал. Как бы вы написали это более эффективно? Может быть, так? : power :: Integer -> Integer -> Integer power n k | k <0 = ошибка "мощность: отрицательный аргумент" power n 0 = 1 power nk = n * power n (k-1) –
Посмотрите, как '^' [определено] (https: //hackage.haskell. org/package/base-4.9.0.0/docs/src/GHC.Real.html #% 5E) в 'base'. – redneb
@ EL- Есть лучшие алгоритмы вокруг. Например. вы можете использовать 'pow a (2 * n) = pow (a * a) n' и' pow a (2 * n + 1) = a * pow (a * a) n', чтобы получить алгоритм, который выполняет только ' log n' вместо 'n'. Для больших 'n' это намного эффективнее. – chi