Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
2 / 2 / 1
Регистрация: 15.10.2015
Сообщений: 173

Конструирование типов данных

12.01.2017, 19:08. Показов 3172. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

На первый взгляд задание кажется простым, вот формулировка:

Тип данных Ordering определен в стандартной библиотеке так:

Haskell
1
data Ordering = LT | EQ | GT
Он используется при определении функций, сравнивающих элементы каких-
либо типов.

Определим тип LogLevel следующим образом

Haskell
1
data LogLevel = Error | Warning | Info
Реализуйте функцию cmp, сравнивающую элементы типа LogLevel так, чтобы
имел место порядок Error > Warning > Info.

Haskell
1
2
cmp :: LogLevel -> LogLevel -> Ordering 
cmp = undefined
Я так понял мне нужно объявить LogLevel как представителя класса Ordering или создать класс LogLevel . Поправьте, если я где-то ошибаюсь, потому что GHCi сообщает об ошибке parse error on input ‘=’

Haskell
1
2
3
4
5
6
data Ordering = LT | EQ | GT
data LogLevel = Error | Warning | Info
 
class LogLevel a where
    cmp :: a -> a -> Ordering 
    cmp x y = if x = y then Warning else if x<=y then Info else Error
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2017, 19:08
Ответы с готовыми решениями:

Внутреннее представление типов данных VB6.0. Эквиваленты типов данных VB в C++
Добрый день. Интересует такой вопрос. Где можно почитать, посмотреть научные данные по внутреннему представлению данных в VB. Например, мне...

Конструирование форм базы данных
Здравствуйте.Помогите, пожалуйста, с заданием.А то никак не получается сделать. 2. Создать однотабличную форму в режиме...

Чтение и запись типов, массив типов и List<> данных в файл
Здравствуйте Подскажите способ записи и чтения любых типов данных (не компонентов) Например это: string в котором текст может быть...

12
Модератор
 Аватар для Curry
5158 / 3479 / 536
Регистрация: 01.06.2013
Сообщений: 7,541
Записей в блоге: 9
12.01.2017, 19:41
Проще всего использовать встроенный механизм deriving (генерация некоторых классов типов компилятором)
Haskell
1
2
3
4
5
6
7
data LogLevel = Error | Warning | Info
        deriving (Eq,Ord)
 
cmp :: LogLevel -> LogLevel -> Ordering
cmp = compare
 
main =  print $ [cmp Error Warning, cmp Info Error]
Добавлено через 4 минуты
Схожие темы : Сравнение собственных типов
День недели по номеру

Добавлено через 11 минут
... или скучно перебирать варианты
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
data LogLevel = Error | Warning | Info
          deriving Show  
--        deriving (Eq,Ord)
 
cmp :: LogLevel -> LogLevel -> Ordering
cmp Error Error = EQ
cmp Warning Warning = EQ
cmp Info Info = EQ
cmp Error _ = LT
cmp Info _ = GT 
cmp _ Error = GT
cmp _ Info = LT 
 
main =  print $ [(x,y,cmp x y)| x <- diap, y <- diap]
    where diap = [Error,Warning,Info] -- если без всяких deriving, ну кроме Show, хотя и без него можно
Можно ещё написать функцию отображающую LogLevel в целые и сравнивать их.
3
2 / 2 / 1
Регистрация: 15.10.2015
Сообщений: 173
12.01.2017, 20:08  [ТС]
Вы приравняли функцию к функции. Так можно делать?
0
Модератор
 Аватар для Curry
5158 / 3479 / 536
Регистрация: 01.06.2013
Сообщений: 7,541
Записей в блоге: 9
12.01.2017, 20:21
Цитата Сообщение от SKY_SHY Посмотреть сообщение
Вы приравняли функцию к функции. Так можно делать?
Спросите компилятор - он подтвердит.
И это не приравнивание, а определение одной ф-ии через выражение в бесточечном стиле. В выражении только одна функция.

Добавлено через 3 минуты
Собственно, в вашем задании
Haskell
1
cmp = undefined
- то же самое. undefined - функция.
1
2 / 2 / 1
Регистрация: 15.10.2015
Сообщений: 173
12.01.2017, 20:27  [ТС]
Да, точно совсем запутался.
0
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
12.01.2017, 21:35
Haskell
1
2
3
4
5
6
7
cmp :: LogLevel -> LogLevel -> Ordering 
cmp x y
    | x == y = EQ
    | x == Info = LT
    | x == Error = GT
    | y == Info = GT
    | otherwise = LT
1
Модератор
 Аватар для Curry
5158 / 3479 / 536
Регистрация: 01.06.2013
Сообщений: 7,541
Записей в блоге: 9
12.01.2017, 21:45
XRuZzz, можно и так, но потребуется deriving Eq, а тогда уж сразу deriving (Eq,Ord).
1
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
12.01.2017, 21:51
"deriving Ord" не сработает из его условия, придётся конструкторы местами переставлять:
Info < Warning < Error
Info LT Warning LT Error
Info | Warning | Error
1
Модератор
 Аватар для Curry
5158 / 3479 / 536
Регистрация: 01.06.2013
Сообщений: 7,541
Записей в блоге: 9
12.01.2017, 22:07
XRuZzz, точно! Я внимания не обратил
Haskell
1
2
3
4
5
6
7
8
data LogLevel = Error | Warning | Info
          deriving (Show,Eq,Ord,Enum)
 
cmp :: LogLevel -> LogLevel -> Ordering
cmp = flip compare
 
main =  print $ [(x,y,cmp x y)| x <- diap, y <- diap]
    where diap = [Error .. Info]
1
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
12.01.2017, 22:45
Отформатировал вывод и выложил на github:
AXT Cyberforum: LogLevel
2
Модератор
 Аватар для Curry
5158 / 3479 / 536
Регистрация: 01.06.2013
Сообщений: 7,541
Записей в блоге: 9
12.01.2017, 23:02
XRuZzz, годно, только зачем UnicodeSyntax ?
0
12.01.2017, 23:05

Не по теме:

Просто люблю unicode

0
Модератор
 Аватар для Curry
5158 / 3479 / 536
Регистрация: 01.06.2013
Сообщений: 7,541
Записей в блоге: 9
12.01.2017, 23:29
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import Data.List 
 
showOrd LT = "<" 
showOrd GT = ">"
showOrd _  = "="
 
data LogLevel = Error | Warning | Info
          deriving (Show,Eq,Ord,Enum)
 
cmp :: LogLevel -> LogLevel -> Ordering
cmp = flip compare
 
main =  mapM_ (\(x,y) -> putStrLn $ intercalate "\t" 
                 [show x, showOrd $ cmp x y, show y])
--              [(x,y)| x <- diap, y <- diap]
              $ do 
                 x <- diap
                 y <- diap
                 return (x,y)
    where diap = [Error .. Info]
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.01.2017, 23:29
Помогаю со студенческими работами здесь

Данная серверная версия не поддерживает конструирование диаграмм баз данных и таблиц
SQL Managment Studio 2012 При попытке создать таблицу появляется такая ошибка. Подскажите пожалуйста как решить данную проблему. ...

Запись данных в MS Access с ADOQuery (ошибка типов данных при записи)
Здравствуйте. Я добавила на форму три компонента ADOConnection, DataSource, ADOQuery. В ADOQuery прописала: SELECT*FROM Справочник ...

Импорт данных в таблицу БД из Excel с сохранением всех типов данных в таблице БД
Добрый день! Произвожу импорт данных в таблицу БД ms access из таблицы excel. Необходимо при импорте сохранить все типы данных...

Отличие структур данных от абстрактных типов данных
Добрый день! Подскажите пожалуйста, в чем отличие структур данных от абстрактных типов данных?

Конвертация типов данных
Здравствуйте. Подскажите пожалуйста каким образом можно вывести в TextView информацию из переменной числового типа.


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru