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

Напишите функцию isAll, возвращающую True, если все элементы списка совпадают с заданным

18.01.2021, 12:57. Показов 828. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите функцию isAll, возвращающую True, если все элементы списка совпадают с данным и возвращающую False
в противном случае.
1 *Main> isAll 1 [1,2,3]
2 False
3 *Main> isAll 1 [1,1,1]
4 True

Желательно с объяснением.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.01.2021, 12:57
Ответы с готовыми решениями:

Напишите функцию inRange', возвращающую True, если третий аргумент-число расположен между первым и вторым
Напишите функцию inRange', по данным трём числам возвращающую True, если третье число принадлежит отрезку, границами которого являются...

Написать подпрограмму SubSet, возвращающую true, если список List включает все вершины списка List1 (Turbo Pascal)
Для отладки подпрограммы составляется основная программа, включающая определение структур данных и средства контрольного вывода результатов...

Включить в программу функцию, возвращающую true, если самый высокий ученик имеет и самый большой все, и fal
Включить в программу функцию, возвращающую true, если самый высокий ученик имеет и самый большой все, и false в противном случае.

5
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,706
Записей в блоге: 14
18.01.2021, 13:40
Haskell
1
2
3
4
5
6
7
isAll :: (Eq a) => [a] -> a -> Bool
isAll [] _ = True
isAll (x:xs) v = (x==v) && (isAll xs v)
 
main = do
   print $ isAll "aaaaaaa" 'a'
   print $ isAll "aabaaaa" 'a'
2
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,543
Записей в блоге: 9
18.01.2021, 15:42
Хвостовая рекурсия
Haskell
1
2
3
4
isAll :: Eq a => a -> [a] -> Bool
isAll _ [] = True 
isAll w (x:xs) | w/=x = False
               | otherwise = isAll w xs
2
240 / 189 / 32
Регистрация: 02.07.2020
Сообщений: 142
18.01.2021, 18:59
Цитата Сообщение от Curry Посмотреть сообщение
Хвостовая рекурсия
GHC сгенерирует для обоих ваших вариантов почти одинаковый промежуточный код.
Если его портировать обратно в Haskell, получится примерно это
Haskell
1
2
3
4
5
6
7
8
isAll :: Eq a => [a] -> a -> Bool
isAll xs' v =
  case xs' of
    []   -> True
    x:xs ->
      case x == v of
        False -> False
        True  -> isAll xs v
и это
Haskell
1
2
3
4
5
6
7
8
isAll :: Eq a => a -> [a] -> Bool
isAll w xs' =
  case xs' of
    []   -> True
    x:xs ->
      case w /= x of
        False -> isAll w xs
        True  -> False
соответственно.
Существенной разницы в производительности не будет.

Зато вот так
Haskell
1
2
isAll :: Eq a => a -> [a] -> Bool
isAll = all . (==)
или так
Haskell
1
2
isAll :: Eq a => a -> [a] -> Bool
isAll y = foldr (\x z -> x == y && z) True
можно в лучшем случае значительно выиграть за счет build/fold fusion, ну а в остальных случаях будет не хуже чем с рекурсией.
А точнее будет сопоставимо по скорости вот с таким решением, которое немного быстрее за счет того, что не таскает за собой лишний аргумет.
Haskell
1
2
3
4
5
isAll :: Eq a => a -> [a] -> Bool
isAll y = go
  where
    go [] = True
    go (x:xs) = y == x && go xs
Его уже не получится бекпортировать из внутреннего представления, там, пардон, goto
2
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,543
Записей в блоге: 9
18.01.2021, 19:20
Цитата Сообщение от extrn Посмотреть сообщение
быстрее за счет того, что не таскает за собой лишний аргумет.
Да, вы правы. Некогда я баловался задачками на https://www.codewars.com/, и что бы уложиться по скорости, обычное дело, создаётся вложенная функция ради уменьшения числа аргументов, а то и несколько. Традиционно, вложенную, по крайней мере там, называют go, там можно смотреть чужие решения после того, как сам решил.
1
240 / 189 / 32
Регистрация: 02.07.2020
Сообщений: 142
18.01.2021, 19:35
Вряд ли традиция именования пошла от них
Но да, в ряде случаев это правда помогает компилятору лучше оптимизировать.
Справедливости ради, решение с foldl' скорее всего будет еще быстрее, но только оно пройдет весь список, а не до первого /=, так что не во всех случаях быстрее.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.01.2021, 19:35
Помогаю со студенческими работами здесь

Описать функцию, возвращающую True, если параметр является степенью числа 5
Описать функцию IsPower5(K) логического типа, возвращающую True, если целый параметр K (> 0) является степенью числа 5, и False в...

Написать функцию, возвращающую True, если целый параметр K (> 0) является палиндромом
Написать функцию, возвращающую True, если целый параметр K (> 0) является палиндромом (то есть его запись читается одинаково слева направо...

Описать функцию IsPalindrom(K), возвращающую True, если целый параметр K является палиндромом
Описать функцию IsPalindrom(K), возвращающую True, если целый параметр K (> 0) является палиндромом (то есть его запись читается ...

Описать функцию IsPalindrom(K), возвращающую True, если целый параметр К(>0) является палиндромом
Описать функцию IsPalindrom(K), возвращающую True, если целый параметр К(>0) является палиндромам (то есть его запись читается одинаково...

Описать функцию IsPalindrome(K), возвращающую True, если целый параметр K является палиндромом
Добрый день! Нужна помощь в решении задачи! Описать функцию IsPalindrome(K), возвращающую True, если целый параметр K (> 0)...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru