Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 07.11.2018
Сообщений: 4

Вывод требуемых элементов из структуры

11.11.2019, 09:20. Показов 1986. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть две структуры, у которых поле author одинаковое, а все остальные поля разные. Необходимо вывести название самого раннего произведения одного автора. Чтобы это сделать, я сначала создаю список всех книг автора, а потом в другой функции провожу поиск по году, но как правильно передать одну функцию в другую?

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
data Book = Book {
    bookName :: String,
    autor    :: String,
    year     :: Int
} deriving Show
 
book0 = Book{
    bookName = "For Whom the Bell Tolls",
    autor    = "Hemingway E.",
    year     = 1940
}
 
book1 = Book{
    bookName = "To Have and Have Not",
    autor    = "Hemingway E.",
    year     = 1937
}
 
book2 = Book{
    bookName = "On the Road",
    autor    = "Kerouac J.",
    year     = 1957
}
 
book3 = Book{
    bookName = "The Dharma Bums",
    autor    = "Kerouac J.",
    year     = 1958
}
 
book4 = Book{
    bookName = "Catch-22",
    autor    = "Heller J.",
    year     = 1961
}
 
listBooks :: [Book]
listBooks = [book0, book1, book2, book3, book4]
 
--Добавление элемента
add :: [Book] -> Book -> [Book]
add listBooks addBook = listBooks ++ [addBook]
 
--Удаление элемента по индексу
del :: [Book] -> Int -> [Book]
del listBooks index 
 | index < 1 || index > length listBooks = listBooks
 | index == 1 = tail listBooks
 | index == length listBooks = init listBooks
 | otherwise = head listBooks : del (tail listBooks) (index - 1)
 
--Замена элемента по индексу
rep :: [Book] -> Int -> Book -> [Book]
rep listBooks index repBook
 | index < 1 || index > length listBooks = listBooks
 | index == 1 = [repBook] ++ tail listBooks
 | index == length listBooks = init listBooks ++ [repBook]
 | otherwise = take(index - 1)listBooks ++ [repBook] ++ drop(index)listBooks
 
--Поиск книг автора
authorBooks :: String -> [Book] -> [Book]
authorBooks authorName tlist
 | length tlist < 1 = []
 | authorName == autor (head tlist) = [head tlist] ++ authorBooks authorName(tail tlist)
 | otherwise = authorBooks authorName(tail tlist)
 
--Вывод раннего произведения
earliestEdition :: [Book] -> String -> [Book]
earliestEdition authorBooks authorName tlist
 | length authorBooks (authorName tlist) < 1 = []
 | year (head authorBooks(authorName tlist)) < head . tail authorBooks(authorName tlist) = authorBooks authorName(tail tlist)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.11.2019, 09:20
Ответы с готовыми решениями:

Вывод элементов структуры
Приветствую. Есть структура: typedef struct PASSENGER{ int name; int status; int place_in_the_queue; int city; ...

Вывод на экран элементов структуры
помогите пожалуйста с програмкой.Прохожу практику по книге где нужно записать данные в структуру, захотел вывести на экран а програмка...

Ввод и вывод элементов структуры
Не получается ввести и вывести на экран элементы структуры после второго. #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include...

2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38170 / 21105 / 4307
Регистрация: 12.02.2012
Сообщений: 34,697
Записей в блоге: 14
11.11.2019, 10:14
Лучший ответ Сообщение было отмечено deserdhood как решение

Решение

Ваша задача решается одной функцией:

Haskell
1
2
3
4
5
6
7
8
9
10
getEarliest :: [Book]-> String -> [Book]
getEarliest bs a = filter (\b -> (year b)==minYear) al  --  выбираем из книг заданного автора книги, изданные в самый ранний год
                  where al = filter (\b -> (autor b)==a) bs  -- отбираем книги заданного автора
                        minYear = minimum $ map year al -- ищем самый ранний год издания
 
-- Проба:
 
*Main> getEarlier listBooks "Hemingway E."
[Book {bookName = "To Have and Have Not", autor = "Hemingway E.", year = 1937}]
it :: [Book]
Имейте в виду, что книг может быть несколько, поэтому функция возвращает список
3
11.11.2019, 11:18

Не по теме:

Не читайте, это, я ещё не проснулся.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.11.2019, 11:18
Помогаю со студенческими работами здесь

Вывод элементов структуры на экран
Три вечера уже с этим сижу, не получается. Задана структура struct DAY {char *name; int num; } DAY day_tab= { ...

Вывод структуры с исключением строк, элементов
Здравствуйте! Пишу консольную программу на подобие медицинского интерфейса. Прилагаю рабочую часть программы и файлы с структурами: (база...

Вывод элементов структуры через cout
Здравствуйте! Подскажите, почему в моём простом примере при попытке вывести элементы структуры через cout я не получаю ожидаемый...

Реализовать функцию, которая вычисляет общее количество требуемых элементов
Подскажите пожалуйста, как реализовать функцию, которая вычисляет общее количество требуемых элементов.

Ввод/вывод данных элементов структуры через функцию
Разработать программу учета покупок ювелирного магазина. Данные о покупках хранить в виде массива структур. Итоговая информация должна...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru