Сделать домашней|Добавить в избранное
 

Сайт, посвящен программированию,
исходникам разных программ и
известным алгоритмам

 
Исходники программ » Языки программирования » Haskell » Лабораторная работа № 4 (Haskell)
на правах рекламы

Лабораторная работа № 4 (Haskell)

Автор: admin от 3-01-2012, 19:40

Задание на функциональном языке программирования haskell
   Функции для работы с типом List.
  Для введенного ранее типа List определите следующие функции:
   1). lengthList, возвращающую длину списка типа List.
   2). nthList, возвращающую n-й элемент списка.
   3). removeNegative, которая из списка целых (тип List Integer) удаляет отрицательные элементы.
   4). fromList, преобразующую список типа List в обычный список.
   5). toList, преобразующую обычный список в список типа List.


Решение:

data List a = NIL | Cons a (List a) deriving (Eq,Show)

lengthList :: List Int -> Int
lengthList (Cons x xs) = 1+lengthList xs
lengthList NIL = 0

nthList :: List Int -> Int -> Int
nthList NIL n = 0
nthList (Cons x xs) n = if n/=1 then nthList xs (n-1) else x

removeNegative :: List Int -> List Int
removeNegative NIL = NIL
removeNegative (Cons x xs) = if x>0 then Cons x (removeNegative xs) else removeNegative xs

fromList :: List Int -> [Int]
fromList NIL = []
fromList (Cons x xs) = x:fromList xs

toList :: [Int] -> List Int
toList [] = NIL
toList (x:xs) = Cons x (toList xs)

Результаты:
Main> lengthList (Cons 5 (Cons 10 (Cons 11 (Cons 3 NIL))))
4 :: Int
Main> nthList (Cons 5 (Cons 10 (Cons 12 (Cons 3 NIL)))) 3
12 :: Int
Main> removeNegative (Cons 5 (Cons (-10) (Cons 11 (Cons (-8) NIL))))
Cons 5 (Cons 11 NIL) :: List Int
Main> fromList (Cons 5 (Cons (-10) (Cons 11 (Cons (-8) NIL))))
[5,-10,11,-8] :: [Int]
Main> toList [2,8,0,19]
Cons 2 (Cons 8 (Cons 0 (Cons 19 NIL))) :: List Int

Дополнительное задание:
написать функцию, возвращающую сумму элементов списка list.

sumList :: List Int -> Int
sumList NIL = 0
sumList (Cons x xs) = x + sumList xs

 

Если вам нравится то, что мы пишем, пожалуйста, нажмите на интересующую вас рекламу сбоку, сверху, или сразу после статьи. Будет стимул писать лучше и чаще. Хорошего вам дня.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий