Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для Dzhakomausss
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 33

Функции высшего порядка

30.11.2013, 18:51. Показов 1718. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.

Даны пять функций:
1: isStructured, проверяющая, что её аргумент является сложным типом.
2: getType, по заданному имени и списку идентификаторов (базе данных) возвращающая тип идентификатора с указанным именем.
3: getFields, по заданному имени возвращающая список полей идентификатора, если он имеет тип структуры
4: getByType, возвращающая список имён идентификаторов указанного типа из базы данных.
5: getByTypes, аналогичная предыдущей, но принимающей вместо одного типа списков типов (с помощью этой функции можно получить, например, список всех идентификаторов с числовым типом).

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
data MyType = Null |
           MyInt |
              MyFloat |
              MyString |
              MyStruct [(String,MyType)] deriving (Show,Eq)
 
db = [("x",MyInt),
      ("y",MyFloat),
      ("z",MyString),
      ("u",MyInt),
      ("s",MyStruct [("s1",MyInt),("s2",MyFloat)])]
 
isStructured :: MyType -> Bool
isStructured (MyStruct b) = True
isStructured (_) = False
 
getType :: String -> [(String,MyType)] -> MyType
getType _ [] = Null
getType s (h:t) = if fst(h) == s then snd(h) else getType s t
 
getFieldsFromStruct :: MyType -> [(String,MyType)]
getFieldsFromStruct (MyStruct a) = a
getFieldsFromStruct _ = []
 
getFields :: String -> [(String,MyType)] -> [(String,MyType)]
getFields _ [] = []
getFields s (h:t) = if fst(h) == s && isStructured (snd h) then
               getFieldsFromStruct (snd h)
                    else
                        getFields s t
 
getByType :: MyType -> [(String,MyType)] -> [String]
getByType _ [] = []
getByType a (h:t) = if a == (snd h) then
                        (fst h) : getByType a t
                    else
                        getByType a t
 
getByTypes :: [MyType] -> [(String,MyType)] -> [String]
getByTypes [] _ = []
getByTypes _ [] = []
getByTypes (h:t) db = (getByType h db) ++ getByTypes t db
Помогите реализовать их с помощью функций высшего порядка , буду очень благодарен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.11.2013, 18:51
Ответы с готовыми решениями:

Функции высшего порядка
В агентстве недвижимости продают квартиры, комнаты и частные дома. Квартира характеризуется этажом, площадью и этажность дома. Комната...

Функции высшего порядка
Помогите пожалуйста, обыскал форум, не нашел реализацию с помощью функций высшего порядка: 1) Функция area, возвращающая площадь...

Функции высшего порядка
Здравствуйте! Помогите, пожалуйста, переделала функции на функции высшего порядка все, кроме одной. Не понимаю, как разобраться с...

1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,736
Записей в блоге: 14
30.11.2013, 21:49
Вот, к примеру, другая реализация getType:

Haskell
1
2
3
4
5
6
7
getType' :: String -> [(String,MyType)] -> MyType 
getType' s h = snd $ head $ filter (\ x -> (s == fst x)) h 
 
Main> getType "y" db   -- исходная
MyFloat
Main> getType' "y" db  -- новая
MyFloat
Добавлено через 7 минут
а вот - getByType

Haskell
1
2
3
4
5
6
7
getByType' :: MyType -> [(String,MyType)] -> [String]
getByType' x base = map fst $ filter (\ z -> (x == snd z)) base
 
Main> getByType MyInt db  -- старая
["x","u"]
Main> getByType' MyInt db  -- новая
["x","u"]
Добавлено через 6 минут
getByTypes:

Haskell
1
2
3
4
5
6
7
getByTypes' :: [MyType] -> [(String,MyType)] -> [String]
getByTypes' lt base = map fst $ filter (\ z -> (snd z) `elem` lt) db
 
Main> getByTypes [MyInt,MyFloat] db  -- старая
["x","u","y"]
Main> getByTypes' [MyInt,MyFloat] db -- новая
["x","y","u"]
В общем, принцип замены простой рекурсии на map (и, при необходимости, filter) ясен...
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.11.2013, 21:49
Помогаю со студенческими работами здесь

Функции высшего порядка
Используя функцию нахождения производной и преобразование Ньютона для нахождения нулей функции реализовать нахождение одного из локальных...

Функции высшего порядка
Задание: Функция area, возвращающая площадь фигуры. Для текстового поля площадь зависит от высоты и ширины буквы в шрифте. Поскольку...

Функции высшего порядка
Помогите пожалуйста преобразовать функции с помощью функций высшего порядка data Child = PersData { name :: String, surname :: String,...

Функции высшего порядка
Всем доброго вечера :) По заданному имени и списку идентификаторов (базе данных) возвращающая тип идентификатора с указанным именем ...

Функции высшего порядка
Второе задание lab5.pdf. Вернитесь к заданиям из лабораторной работы №3 и реализуйте их с помощью функций высшего порядка....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru