2016-05-21 3 views
-1

дали номер x и список [a_0,a_1,.....,a_n] вы должны реализовать функцию «poly», где результат должен быть(Haskell) Как бы вы оценили полином со складками?

poly = a_0 + a_1*x + a_2*x^2 + .... + a_n*x^n. 

как бы вы сделали, что использование только fold?

+5

так как это выглядит как упражнение/домашнее задание: что вы пробовали? – Carsten

+0

, так что это явно не использует сгиб, но у него есть основные идеи, которые вам нужны: 'let poly x as = sum $ zipWith (*) (итерация (* x) 1) как' - так что вы можете сами думать о решении или выполните поиск документации по вышеприведенным частям и попытайтесь выяснить, как это реализовать со сгибом;) - вы узнаете в любом случае – Carsten

ответ

1

Как это кажется домашнее задание упражнения я буду только дать некоторые советы:

  1. Записывают упрощенный тип подписи для вашей функции в файле myfile.hs

    module MyFile where 
    
    evalPolynomial :: Int -> [Int] -> Int 
    evalPolynomial x coeffs = undefined 
    
  2. в качестве альтернативы вы можете написать оценка

    a_0 + a_1*x + a_2*x^2 + .... + a_n*x^n == 
    a_0 + x*(a_1 + x*(a_2 + x*(...(x*(a_(n-1) + x * (a_n))...))) 
    

    второй является al готовый к работе как fold.

    Одна вещи, чтобы следить чтение документации - в последнее время типа подпись foldX была изменена на более общую версию, так что посмотрят на base-4.7.0.2/Data.List вместо base-4.8.0.0/Data.List или новее, если вы запутались.

  3. загрузить файл в GHCI и посмотреть погоду он работает

  4. удалить тип подписи evalPoly и загрузите файл снова в GHCi

    $ > ghci myfile.hs 
    MyFile*> :type evalPoly 
    evalPoly :: Num a => a -> [a] -> a 
    

и добавить, что в файл вместо упрощенной версии. последний шаг делает вашу функцию полиморфные, то есть, то вы можете использовать его с Double, Int, Integer и все типы, которые являются экземплярами Num класса (думаю, что-то вроде Java интерфейсов - если вы больше знакомы с этим)

+0

Для справки # 2 - это приложение [Метод Хорнера] (https: // ru. wikipedia.org/wiki/Horner%27s_method). – chepner

+0

Спасибо за помощь :) Я уверен, что мне нужно больше практики с складыванием. – JinseiNagai

Смежные вопросы