Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
6 / 6 / 3
Регистрация: 12.03.2014
Сообщений: 341

Падает Haskell при генерации списка

11.02.2018, 21:46. Показов 1401. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Выполнял лабораторную (работа с генератором списков):
Кликните здесь для просмотра всего текста

Найти все двузначные числа, представимые в виде суммы корней двух натуральных чисел.
Haskell
1
[ [z,x,y] | x <- [1..], y <- [1..], let z = sqrt(x) + sqrt(y), z > 9, z < 100 ]

Haskell не выдерживает и падает. Можете подсказать, что я не так делаю?
Понимаю, что там бесконечный список, но для Haskell это не должно ведь быть проблемой, если я задал ограничение.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2018, 21:46
Ответы с готовыми решениями:

Программа по генерации 7-значного номера время от времени (не всегда) падает с ошибкой memory violation
Добрый день. моя программа по генерации 7-значного номера время от времени (не всегда) падает с ошибкой memory violation : Exception...

Сумма элементов списка Haskell
У меня есть два списка list1 = list2 = Необходимо создать новый список в котором будет сумма элементов двух списков. ...

Вывести элемент из списка подсписков Haskell
Здравствуйте дорогие друзья, пытаюсь долго решить задачу. Условие такое: есть список ,] и нужно что-нибудь с ним сделать (что угодно)...

9
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,550
Записей в блоге: 9
11.02.2018, 23:59
Лучший ответ Сообщение было отмечено Bolbine84455 как решение

Решение

Цитата Сообщение от Bolbine84455 Посмотреть сообщение
Понимаю, что там бесконечный список, но для Haskell это не должно ведь быть проблемой, если я задал ограничение.
Он не настолько умный. Перебирать лучше сразу корни - целые числа и выводить не список списков, а список кортежей - так быстрей.
Haskell
1
[ (z,x*x,y*y) | x <- [1..98], y <- [1..98], let z = x + y, z > 9, z < 100 ]
А можно ещё удалить дубли
Haskell
1
2
3
4
5
import Data.List
 
main :: IO () 
main = print $ nubBy (\(l,_,_) (r,_,_) -> l==r) 
    [ (z,x*x,y*y) | let l = [1..98 :: Int], x <- l, y <- l, let z = x + y, z > 9, z < 100 ]
3
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
12.02.2018, 11:10
Цитата Сообщение от Bolbine84455 Посмотреть сообщение
Haskell не выдерживает и падает. Можете подсказать, что я не так делаю?
Глупости написанного он не выдерживает. И честно бежит по бесконечному списку как автор сего кота и написал.
2
13.02.2018, 00:39  [ТС]

Не по теме:

Всем спасибо

0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
13.02.2018, 11:36
Цитата Сообщение от Bolbine84455 Посмотреть сообщение
если я задал ограничение
Ты задал не ограничение, а фильтрацию. Фильтрация применяется ко всем элементам списка.

Сравни:
Haskell
1
2
3
4
zipper x y = (sqrt x + sqrt y, x, y)
 
predicateA (z,_,_) = z > 9 && z < 99
a = filter predicateA $ zipWith zipper [1..] [1..]
и

Haskell
1
2
3
predicateBDrop (z,_,_) = z <= 9
predicateBTake (z,_,_) = z < 99
b = takeWhile predicateBTake $ dropWhile predicateBDrop $ zipWith zipper [1..] [1..]
Первое --- это то, что ты написал. Второе --- это то, что ты хотел написать.

https://ideone.com/CnAFtu
2
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
13.02.2018, 12:05
А вообще задача сформулирована интересно, и перед тем, как кидаться в Хаскель, неплохо бы подумать на бумаге с ручкой. Написанное выше = и sqrt конечно бред полный - раз требуются двузначные числа, то подразумевается что они натуральные, а тут получатся результаты не только целые. Если взять критерий k = sqrt(n) + sqrt(m) при условии натуральности всех букв, то можно поставить вопрос - обязательно ли n и m должны быть полными квадратами? Может ли быть ситуация, когда теоретически сумма двух иррациональных чисел даст нам рациональное? Этот вопрос сам по себе интересен, но далек от проблем ленивого студента. Но задача становится хотя бы чуть интереснее. Хотя я сомневаюсь, что ее составитель думал об этом, когда писал ее. Я вообще сомневаюсь, что он думал - просто кидал от балды не приходя в сознание разные условия, чтобы студенты друг у друга не списывали, но чтобы можно было уложить в шаблон кода на Хаскеле.
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
13.02.2018, 12:07
Цитата Сообщение от korvin_ Посмотреть сообщение
Первое --- это то, что ты написал. Второе --- это то, что ты хотел написать.
Не совсем однако, у него x и y предполагались независимые
0
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,550
Записей в блоге: 9
13.02.2018, 12:23
Цитата Сообщение от Bolbine84455 Посмотреть сообщение
Найти все двузначные числа, представимые в виде суммы корней двух натуральных чисел.
Вообще то, вполне очевидно что это все двузначные числа и есть, и можно было бы написать
Haskell
1
[10..99]
но это именно, лабораторка по Haskell, а не по математике. Да, неинтересная. Зато без нахождения подсписков в списках.
1
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
13.02.2018, 12:26
Я вообще предлагаю в качестве ответа написать
Haskell
1
[10..99]
и сказать преподу, что надо думать перед тем как составлять задачи

(медленно набираю буквы )
1
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
13.02.2018, 14:40
Цитата Сообщение от Black Fregat Посмотреть сообщение
Не совсем однако, у него x и y предполагались независимые
А, ну да, перепутал с parallel list comprehensions. Тогда да, перемножить (в терминах множеств) два бесконечных списка так в лоб не получится.

Добавлено через 14 минут
Наверное, как-то так:

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
zipper x y = (sqrt x + sqrt y, x, y)
 
predicateA (z,_,_) = z > 9 && z < 99
a = filter predicateA [ zipper x y | x <- [1..], y <- [1..] ]
 
predicateBDrop (z,_,_) = z <= 9
predicateBTake (z,_,_) = z < 99
limit = (takeWhile predicateBTake) . (dropWhile predicateBDrop)
calcZ ys x = limit $ map (zipper x) ys
b = concat $ takeWhile (not . null) $ map (calcZ [1..]) [1..]
 
last2 []     = []
last2 [x]    = [x]
last2 [x, y] = [x,y]
last2 (x:xs) = last2 xs
 
run xs = do
    mapM_ print $ take 2 xs
    putStrLn ".."
    mapM_ print $ last2 xs
    putStrLn $ "total items count: " ++ show (length xs)
 
main = run b
=>
Code
1
2
3
4
5
6
(9.06225774829855,1.0,65.0)
(9.12403840463596,1.0,66.0)
..
(98.98979538707079,9602.0,1.0)
(98.99489782636645,9603.0,1.0)
total items count: 15999176
--- https://ideone.com/jMaRP9
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.02.2018, 14:40
Помогаю со студенческими работами здесь

Удалить из заданного списка все числа - Scheme, Haskell
Здравствуйте. Помогите, пожалуйста, задачу решить. Нужно удалить из заданного списка все числа. Задача выполняется на двух языках:...

Место ФП и Haskell в компьютерной индустрии (Для чего он нужен, этот Haskell?)
&quot;У нас&quot; ? А где преподавание этой экзотики на высоте? Добавлено через 2 минуты А где такие &quot;пришедшие&quot; используют...

Из раздела "Haskell" - построить список всех подмножеств списка атомов
Для заданного атомного списка построить список всех подмножеств этого списка. Добавлено через 1 минуту Мое решение: (defun...

Затык при чтении Real World Haskell
В конце первой главы (можно поти по ссылке http://translatedby.com/you/real-§world-haskell-chapter-1-getting-started/into-ru/?page=4 ...

Падает роутер при просмотре с YouTube при подключении bluetooth наушников
Доброго времени суток друзья, и с новым 2016 годом!!! Я проживаю в Казахстане, у меня подключен ID Net, скорость около 50 mbit на внешку...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
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
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru