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

Сортировать кортежи в списке сначала по большим буквам, потом по маленьким, затем Bool и цифрами?

13.05.2017, 23:19. Показов 1511. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Haskell
1
function = [(a,b,c,d)| a <- [0,50,100,150,200], b <- ['a', 'b', 'c'], c <- [True, False], d <-['A','B']]
Создала функцию, создающую разные кортежи, только как вот их посортировать сначала по значению d, потом по b, потом по c и наконец а..? Может кто-нибудь может помочь, буду очень благодарна.

Можно ли здесь как-то встроить sortBy?

Добавлено через 38 минут
Haskell
1
sortBy (compare `on` (\(a,b,c,d) -> (d,b,c,a)))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.05.2017, 23:19
Ответы с готовыми решениями:

Сформировать из значений массива другой массив, расположив в нем сначала цифры, затем – буквы, затем - символы, не являющихся ни буквами, ни цифрами
Создать массив из 20 символьных значений. Сформировать из его значений другой массив, расположив в нем сначала цифры, затем – буквы, затем...

Сортировка двумерного массива сначала по цифрам, потом по буквам
Здравствуйте. Имеется массив такого типа $arr = array(&quot;2236&quot; =&gt; array(&quot;id&quot; =&gt; &quot;2236&quot;, &quot;name&quot; =&gt; &quot;75D&quot;), &quot;2241&quot;...

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

7
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
13.05.2017, 23:28
Haskell
1
2
3
function = sortBy myCompareFunc [(a,b,c,d)| a <- [0,50,100,150,200], b <- ['a', 'b', 'c'], c <- [True, False], d <-['A','B']]
  where myCompareFunc tuple1 tuple2 = compare (f tuple1) (f tuple2)
            f (a,b,c,d) = (d,b,c,a)
0. sortBy сравнивает кортежи, используя функцию сравнения myCompareFunc . Эта функция сравнивает два кортежа, которые получены их исходных (сгенерированных) кортежей путем перестановки элементов в нужном порядке.

И еще:
Не "посортировать", а "отсортировать"
Название функции "function" выбрано неудачно. Функцию следует называть так, чтобы было понятно, что она делает (какой результат возвращает).
2
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
13.05.2017, 23:36  [ТС]
Спасибо вам огромное!!!

Добавлено через 3 минуты
parse error on input ‘=’
Perhaps you need a 'let' in a 'do' block?
e.g. 'let x = 5' instead of 'x = 5'

ошибка?
0
Модератор
 Аватар для Curry
5158 / 3492 / 536
Регистрация: 01.06.2013
Сообщений: 7,587
Записей в блоге: 9
14.05.2017, 00:03
Лучший ответ Сообщение было отмечено Ellie Tetka как решение

Решение

Цитата Сообщение от Ellie Tetka Посмотреть сообщение
sortBy (compare `on` (\(a,b,c,d) -> (d,b,c,a)))
Вот, сами догадались. Кортежи сравниваются вначале по первым элементам, если они равны, то по вторым и т.д.
Так что переставить местами правильная идея.
Haskell
1
2
3
4
5
6
7
import Data.List
import Data.Function
 
main:: IO ()
main = do 
    print $ sortBy (compare `on` (\(a,b,c,d) -> (d,b,c,a)))
        [(a,b,c,d)| a <- [0,50,100,150,200], b <- ['a', 'b', 'c'], c <- [True, False], d <-['A','B']]
Цитата Сообщение от Ellie Tetka Посмотреть сообщение
ошибка?
Надо приводить код на который ругается. Иначе очень мощные телепаты нужны.
2
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
14.05.2017, 00:24  [ТС]
Спасибо вам большое!!!

Добавлено через 7 минут
а существует ли функция, которая например чередует переменные в этих же самых а,b,c,d...
Допустим если [(0,'a',True, 'A'), (0,'a',True, 'B'), (0,'b',True, 'A'), (0,'b',True, 'B'),(0,'c',True, 'A'), (0,'c',True, 'B')....
0
Модератор
 Аватар для Curry
5158 / 3492 / 536
Регистрация: 01.06.2013
Сообщений: 7,587
Записей в блоге: 9
14.05.2017, 00:54
Лучший ответ Сообщение было отмечено Ellie Tetka как решение

Решение

Цитата Сообщение от Ellie Tetka Посмотреть сообщение
а существует ли функция, которая например чередует переменные в этих же самых а,b,c,d...
Допустим если [(0,'a',True, 'A'), (0,'a',True, 'B'), (0,'b',True, 'A'), (0,'b',True, 'B'),(0,'c',True, 'A'), (0,'c',True, 'B')....
Переставьте местами последовательности в генераторе списков
Haskell
1
[(a,b,c,d)| a <- [0,50,100,150,200], c <- [True, False], b <- ['a', 'b', 'c'], d <-['A','B']]
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
14.05.2017, 08:46
Конечно, можно воспользоваться готовой функцией... Но можно и ручками отсортировать:

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
tuplist = [(a,b,c,d)| a <- [0,50,100,150,200], b <- ['a', 'b', 'c'], c <- [True, False], d <-['A','B']]
 
-- Функция сравнения:
-- меняя ее код, можно задавать самые разные порядки
 
tupcmp (a1,b1,c1,d1) (a2,b2,c2,d2) | (a1 > a2) = True
                                   | (a2 > a1) = False
                                   | (b1 > b2) = True
                                   | (b2 > b1) = False
                                   | (c1 > c2) = True
                                   | (c2 > c1) = False
                                   | (d1 > d2) = True
                                   | (d2 > d1) = False
                                   | otherwise = False
 
-- Быстрая сортировка:
 
tupsortQ [] = []
tupsortQ (x:xs) = (tupsortQ [ y | y<- xs, tupcmp x y]) ++ [x] ++ (tupsortQ [ y | y<- xs,  not (tupcmp x y)])
 
-- Сортировка выбором:
 
tupsortV [] = []
tupsortV x = (filter (\ z -> not $ tupcmp z mm) x) ++ (tupsortV (filter (\ z ->  tupcmp z mm) x))
              where  mm = mint x
                     mint x = foldr (\ acc xx -> if tupcmp xx acc then acc else xx) (head x) (tail x)
2
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
14.05.2017, 13:59  [ТС]
Успела сделать точно также! Спасибо!!!

Добавлено через 1 минуту
И Вам спасибо, все-таки есть люди, готовые помочь!!! =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.05.2017, 13:59
Помогаю со студенческими работами здесь

Расположить элементы массива сначала отрицательные, затем 0 и потом положительные
расположить элементы массива сначала отрицательные затем 0 и потом положительные.

Изменить массив так, чтобы сначала выводились 1,затем 0, и потом 2
Дан целочисленный массив, заполненный 0,1 и 2 в случайном порядке. изменить массив так, чтобы сначала выводились 1,затем 0, и потом 2 ...

Заполнить шахматную доску 8*8 цифрами по правилу геометрической прогрессии сначала вправо потом вниз
Заполнить шахматную доску 8*8 цифрами по правилу геометрической прогрессии сначала вправо потом вниз. Есть код шахматной доски: ...

Во второй массив сначала переписать сначала положительные, потом 0, потом отрицательные
Не могу решить задачу, прямо застрял на ней. Помогите, пожалуйста. Нужно: заполнить массив из 10 элементов положительными и...

Получить из массива новый в котором сначала идут положительные числа, затем нули и потом отрицательные
Дан массив Х(N). Получить новый массив Y(N), такой, что в нем сначала идут положительные числа, затем нулевые, и затем отрицательные из X. ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru