Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
xam max
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 200
1

Как создать список кортежей?

19.12.2012, 19:22. Просмотров 2194. Ответов 8
Метки нет (Все метки)

Вот собственно задание. Дан список чисел. Составить список кортежей из всех возможных пар чисел этого списка, таких, что второе число пары больше, чем первое. Помогите кто чем может, желательно чтобы решение выглядело попроще ))
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2012, 19:22
Ответы с готовыми решениями:

Как создать тип данных - список кортежей
Всем привет) Собственно вопрос в заголовке: Как создать тип данных список, элементы которого -...

Как из списка кортежей получить список?
-> ... Добавлено через 58 минут convert :: ( -> Верно определены типы? Добавлено через 13...

Список кортежей. Частота вхождения
Здравствуйте. Есть список кортежей, например: 1,2),(1,3),(2,4),(2,5),(3,6),(4,1)] Как написать...

Сортировка списка кортежей
Привет, подскажите пожалуйста, есть ли функция для сортировки списка кортежей? Например есть такие...

Из двух случайных кортежей сделать список объединения и список прямого произведения
Задача 2. Напишите программу, которая из двух случайных кортежей длины 5 и 4, например, ...

8
Catstail
Модератор
25039 / 12739 / 2340
Регистрация: 12.02.2012
Сообщений: 20,731
19.12.2012, 20:57 2
Вот так:

Haskell
1
2
3
4
5
task :: (Ord a) => [a] -> [(a,a)]
task x = [(y,z) | y <- x, z <- x, z > y]
 
Main> task [1,2,3]
[(1,2),(1,3),(2,3)]
1
xam max
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 200
19.12.2012, 21:22  [ТС] 3
Спасибо, вот кстати еще вопрос решил по аналогии сделать еще одно задание. --Выбрать только те элементы из списка, на которых все функции из списка функций возвращают true, вот что сделал:
v1 (xs) (ys) = [x|x<-xs,y<-ys,y$x] но работает коряво так как ищет хотя бы одну функцию применимую к х, так вот можно ли как нибудь указать чтобы условие y$x выполнялось для всех y?
0
Algiz
161 / 161 / 22
Регистрация: 23.02.2011
Сообщений: 347
19.12.2012, 22:30 4
Haskell
1
check args fncs = [x |x <- args, all (\f -> f x) fncs]
Haskell
1
Prelude> check [1,2,3,4,5] [(>2),(\x -> mod x 2 /= 0)]
Это ответ на второй вопрос, если что
1
19.12.2012, 22:30
korvin_
2763 / 2034 / 365
Регистрация: 28.04.2012
Сообщений: 6,948
20.12.2012, 13:35 5
Цитата Сообщение от Algiz Посмотреть сообщение
Haskell
1
check args fncs = [x |x <- args, all (\f -> f x) fncs]
(\f -> f x) = ($ x)
2
Catstail
Модератор
25039 / 12739 / 2340
Регистрация: 12.02.2012
Сообщений: 20,731
20.12.2012, 17:14 6
А если без стандартных функций, то вот так:

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- Логическое И для списка лог. функций, примененных к одному значению
 
appListf :: (Num a) => [a -> Bool] -> a -> Bool
appListf [] x     = True
appListf (f:fs) x =  (f x) && (appListf fs x)
 
-- Решение задачи
 
task :: (Num a) => [a] -> [a -> Bool] -> [a]
task [] f = []
task (x:xs) f | (appListf  f x) = x : (task xs f)
              | otherwise = (task xs f)
 
-- Проверка
 
Main> task [1,2,-3,4,-5,20] [(< 10), (> 0)]
[1,2,4]
1
Nameless One
Эксперт С++
5800 / 3450 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
25.12.2012, 04:47 7
Цитата Сообщение от xam max Посмотреть сообщение
Помогите кто чем может, желательно чтобы решение выглядело попроще ))
Хотел попроще, но получилось так:

Haskell
1
2
3
4
import Control.Applicative
 
pairs :: Ord a => [a] -> [(a, a)]
pairs x = filter (uncurry (<)) $ (,) <$> x <*> x
1
Сtrl
142 / 132 / 8
Регистрация: 19.07.2011
Сообщений: 184
27.12.2012, 01:19 8
Цитата Сообщение от Nameless One Посмотреть сообщение
Хотел попроще, но получилось так
Для человека, знакомого с аппликативными функторами, ваше решение действительно простое, но суть ведь точно такая же, как и в решении от Catstail. Тогда зачем использовать лишние сущности, если в языке даже есть синтаксический сахар (list comprehensions) для подобного рода задач?
0
Nameless One
Эксперт С++
5800 / 3450 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
27.12.2012, 05:56 9
Цитата Сообщение от Сtrl Посмотреть сообщение
Тогда зачем использовать лишние сущности, если в языке даже есть синтаксический сахар (list comprehensions) для подобного рода задач?
Для данной задачи действительно лучше использовать list comprehensions, но дело в том, что аппликативный функтор - это инструмент гораздо более широкого назначения, т.к. он может работать с любым экземпляром класса Applicative, а не только с List. С другой стороны, существует расширение MonadComprehensions, которое позволяет расширить list comprehensions для использования с любым типом-экземпляром Monad, однако запись через аппликативные функторы часто является более краткой и понятной, в качестве примера можно посмотреть на любой аппликативный парсер.
0
27.12.2012, 05:56
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2012, 05:56

Список кортежей: сформировать по исходному списку список групп
Здравствуйте. Помогите пожалуйста разобраться с заданием. Имеется список кортежей (НомерГруппы,...

Как из двух списков сделать один список кортежей/списков
Доброго времени суток! Буду очень благодарен, если поможете из двух списков, к примеру a и b,...

Список кортежей переменной длины
Привет всем! Помогите, пожалуйста! Я только недавно начал изучать нитон, но что-то я туплю. Как...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.