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

Исключение максимального элемента из списка

18.10.2017, 12:16. Показов 961. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно вывести сумму всех элементов массива, кроме максимального. Я пока что не очень хорошо знаю функцию фильтр. Прошу помочь и если нетрудно, написать, какие аргументы можно указывать в filter()

Haskell
1
2
main:: IO () 
main = getLine >> getLine >>= print . filter (<max). sum . map (read :: String -> Int) .words
Добавлено через 19 минут
Нашёл вариант filter(<maximum), но тоже не идёт
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2017, 12:16
Ответы с готовыми решениями:

Определить функцию, которая вернет факториал максимального элемента списка-аргумента
factorial :: Integer -&gt; Integer factorial n = max

Номер максимального элемента списка
Ребят, ничего не смыслю в прологе, подскажите как найти номер макс элемента списка, заранее спасибо

Поиск максимального элемента списка
1. Написать программу поиска максимального элемента списка.

11
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
18.10.2017, 12:57
Haskell
1
2
getLine >> getLine >>=
  print . sum . (\list -> filter (< maximum list) list) . map (read :: String -> Int) .words
1
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,551
Записей в блоге: 9
18.10.2017, 14:31
Haskell
1
2
3
4
import Data.List
 
main:: IO ()
main = getLine >> getLine >>= print . sum . init . sort . map (read :: String -> Int) .words
1
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
18.10.2017, 15:10
Прошу прощения, не сразу вспомнил, что так можно писать.
Haskell
1
2
getLine >> getLine >>=
  print . sum . do { max <- maximum; filter (< max) } . map (read :: String -> Int) . words
Добавлено через 51 секунду
P.S. мб, нужно подключить Control.Monad
1
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,551
Записей в блоге: 9
18.10.2017, 15:13
А что делать если максимальных несколько?
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38177 / 21112 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
18.10.2017, 19:43
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
А что делать если максимальных несколько?
- типичная студенческая задача... с подставой. Если решать строго по букве, то вот:

Haskell
1
2
3
4
task x = h (tail x) (head x) (head x)
         where h [] m s = s - m
               h (x:xs) m s | (x > m)   = h xs x (s+x)
                            | otherwise = h xs m (s+x)
А если решать в формулировке "без максимальных элементов", то так:

Haskell
1
2
task' x = sum $ filter (/= max) x
          where max = maximum x
Сортировку не одобряю...
1
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
18.10.2017, 21:34
Цитата Сообщение от Catstail Посмотреть сообщение
то можно так же
Haskell
1
2
3
4
5
6
task [] = 0
task (x:xs) = h xs x x 1
         where h [] m s ms = s - ms
               h (x:xs) m s ms | x == m    = h xs x (s+x) (m+ms)
                               | x >  m    = h xs x (s+x) x
                               | otherwise = h xs m (s+x) ms
Но лучше использовать свёртку, насколько я знаю, т.к. легко поменять ленивую на энергичную (например, foldl -> foldl'). Типа того:

Haskell
1
2
3
4
5
6
task [] = 0
task (x:xs) = let (_, s, s') = foldl acc (x, x, x) xs in s - s'
 
acc (m, s, s') x | x == m    = (m, s + x, s' + x)
                 | x >  m    = (x, s + x, x)
                 | otherwise = (m, s + x, s')
Добавлено через 46 минут
Пардон,
- task (x:xs) = h xs x x 1
+ task (x:xs) = h xs x x x
3
0 / 0 / 0
Регистрация: 15.10.2017
Сообщений: 12
19.10.2017, 00:07  [ТС]
Интересно, зачем так замудрённо сделано, что maximum надо вносить в max, а не напрямую /= maximum

Спасибо за помощь!
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
19.10.2017, 01:16
Цитата Сообщение от iduchev Посмотреть сообщение
Интересно, зачем так замудрённо сделано, что maximum надо вносить в max, а не напрямую /= maximum
Полагаю, этот вопрос возник в связи с моим кодом #4 и Catstail #6.

Посмотрите на типы. Ваш код не мог запуститься хотя бы потому, что (<) ожидает Int в аргумент, а Вы подсовываете ему maximum :: [Int] -> Int или max :: Int -> Int -> Int. А в нашем (моём и Catstail) коде max :: Int.

Вопрос для самопроверки: почему так?
2
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
21.10.2017, 14:50
Цитата Сообщение от Catstail Посмотреть сообщение
Сортировку не одобряю...
[Зануда моде в 100500 раз]Если сделать не стандартную сортировку по возрастанию и брать последний элемент сортированного списка (что глупо неоптимально), а передать в функцию сортировки кастомный компаратор, который будет сортировать по убыванию, и брать первый элемент списка, то это будет то же самое, что и просто искать максимум в списке - Haskell ленивый язык, и после поиска максимального элемента дальше сортировать не будет.[/Зануда моде в 100500 раз]
2
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,551
Записей в блоге: 9
21.10.2017, 15:51

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
что глупо неоптимально
кто обзывается, тот так и называется.


У меня самый краткий вариант. А что не оптимально, то само собой.
1
21.10.2017, 15:56

Не по теме:

Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
кто обзывается, тот так и называется.
Да я даже не разглядывал ничьи варианты, просто очередной раз рефлексирую на стереотипы Catstail из языков со строгой аппликативной семантикой :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2017, 15:56
Помогаю со студенческими работами здесь

Как найти номер максимального элемента списка?
Программа ищет максимум в списке, и по идее должна как-то запоминать номер максимального элемента. Однако, я с прологом знаком всего день и...

Определить позицию максимального и минимального элемента списка за 1 рекурсию
Ребят, вот такая вот задачка: определить позицию максимального и минимального эл-та списка за 1 рекурсию. делал вот так ...

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

Найти количество отрицательных элементов после максимального элемента списка
Доброго времени суток, форумчане. Хотел бы попросить помощи по одному вопросу. Дан список(возможен с подсписками) нужно посчитать...

SWI Prolog v.6.0+. Определение максимального элемента среди отрицательных элементов числового списка
Коллеги, помогите, пожалуйста, доработать данную задачу - Определение максимального элемента среди отрицательных элементов числового...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru