2015-01-15 2 views
-2

У меня возникли трудности с выполнением упражнения. Я знаю, что мне нужно определить сигнатуры функций, кроме функции feget, но я не знаю, как это сделать.Класс ForEachInt a in Haskell

Я должен установить ForEachInt класс, который описывает пересечение к структурам данных, которые хранят целые числа, и что включает в себя следующие функции:

  • felength (число элементов в структуре)
  • fehead (первое целое в структуре)
  • fetail (структура без первого целого)
  • fe2list (возвращает всю структуру в списке)
  • feget (все ith согласно фетиш).

Это то, что я сделал:

class ForEachInt a where data ForEachInt = Empty | Int Int Int

Спасибо U.

+1

«Прошлый экзамен» ... да, конечно. – BenjaminPaul

+5

Этот вопрос не соответствует теме, поскольку он не показывает попыток исследования или решения представленной проблемы. –

+0

Я изучаю новый экзамен, пройдя предыдущие экзамены. – user4458598

ответ

0

Вы, кажется, желая создать общероссийский класс Int списка. Очень хорошо:

data ForEachInt = None | Some Int ForEachInt 

Это определяет тип данных для нас, позволяя нам цепи Int ы вместе с помощью Some конструктора. С тех пор это легко:

felength :: ForEachInt -> Int 
felength None  = 0 
felength (Some x xs) = 1 + (felength xs) 

fehead :: ForEachInt -> Int 
fehead (Some x xs) = x 
fehead None  = error "Cannot retrieve from None" 

fetail :: ForEachInt -> ForEachInt 
fetail (Some x xs) = xs 
fetail None  = error "Cannot retrieve from None" 

fe2list :: ForEachInt -> [Int] 
fe2list None  = [] 
fe2list (Some x xs) = x : fe2list xs 

Я рекомендую внимательно изучить каждую из этих функций: рекурсия может легко сбить ее с толку. Что касается соответствия шаблонов, это легко, но на самом деле структура данных сложнее всего понять, я нахожу. LYAH имеет хорошее объяснение типов данных, поэтому проверьте это.

+0

Спасибо, теперь я понял, чего не хватает. Я сосредоточил свое внимание на упражнениях в списках. – user4458598