Добавил:
Tushkan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Готовые лабораторные работы / 2 / 28-29
.hs -- 2.8. Описать функцию, формирующую список всех возможных делителей её аргумента.
-- Сложноть n
f28 a = f28_1 a 2
f28_1 a i = if i == a then
[]
else
if (a `mod` i) == 0 then
i:(f28_1 a (i+1))
else
(f28_1 a (i+1))
--2.9. Описать функцию, формирующую упорядоченный по возрастанию список всех простых делителей её аргумента.
- ложность n^2
f29 a = f24 (f29_1 a 2 [])
f29_1 a i lst = if i == a then
lst
else
if (a `mod` i) == 0 then
if (f29_2 lst i) then
f29_1 a (i+1) (i:lst)
else
f29_1 a (i+1) lst
else
f29_1 a (i+1) lst
f29_2 [] i = True
f29_2 (x:xs) i = if i `mod` x == 0 then
False
else
f29_2 xs i
--Описать функцию, получающую по заданному списку список тех же элементов в обратном порядке.
-- сложность n
f24 xs = f24_1 xs []
--Первый параметр - исходный список, второй - инвариант - полученный список.
f24_1 [] y = y
f24_1 (x:xs) y = f24_1 xs (x:y)
-- Сложноть n
f28 a = f28_1 a 2
f28_1 a i = if i == a then
[]
else
if (a `mod` i) == 0 then
i:(f28_1 a (i+1))
else
(f28_1 a (i+1))
--2.9. Описать функцию, формирующую упорядоченный по возрастанию список всех простых делителей её аргумента.
- ложность n^2
f29 a = f24 (f29_1 a 2 [])
f29_1 a i lst = if i == a then
lst
else
if (a `mod` i) == 0 then
if (f29_2 lst i) then
f29_1 a (i+1) (i:lst)
else
f29_1 a (i+1) lst
else
f29_1 a (i+1) lst
f29_2 [] i = True
f29_2 (x:xs) i = if i `mod` x == 0 then
False
else
f29_2 xs i
--Описать функцию, получающую по заданному списку список тех же элементов в обратном порядке.
-- сложность n
f24 xs = f24_1 xs []
--Первый параметр - исходный список, второй - инвариант - полученный список.
f24_1 [] y = y
f24_1 (x:xs) y = f24_1 xs (x:y)