Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Haskell
Перезагрузить страницу Определить абстрактный тип данных "Множество"
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Riptor Riptor вне форума
Новичок
 
Аватар для Riptor
 
Сообщений: 5
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.03.2011
По умолчанию Определить абстрактный тип данных "Множество" - 22.05.2012, 21:23

Не могу совладать со следующей задачей:
Определите АТД Множество такой что каждый элемент множества является объектом примитивного типа (атомом) или множеством.
Споткнулся на определениии типа. Спасибо.
Ответить с цитированием
  (#2 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 23.05.2012, 10:58

haskell Код:
newtype Set a = Set [Either a (Set a)]


Don't fear the Monad

Последний раз редактировалось calabi-yau; 23.05.2012 в 11:01
Ответить с цитированием
  (#3 (permalink)) Старый
Riptor Riptor вне форума
Новичок
 
Аватар для Riptor
 
Сообщений: 5
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.03.2011
По умолчанию 23.05.2012, 19:09

У меня еще вопрос: почему не отрабатывает
haskell Код:
newtype Set a = Set [a | (Set a)]
???
Ответить с цитированием
  (#4 (permalink)) Старый
korvin korvin вне форума
Member
 
Аватар для korvin
 
Сообщений: 337
Сказал(а) спасибо: 1
Поблагодарили 15 раз(а) в 15 сообщениях
Регистрация: 25.01.2010
По умолчанию 24.05.2012, 09:37

Потому что нет такого типа "|"


Object-oriented design is the roman numerals of computing. — Rob Pike
Ответить с цитированием
  (#5 (permalink)) Старый
Riptor Riptor вне форума
Новичок
 
Аватар для Riptor
 
Сообщений: 5
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.03.2011
По умолчанию 25.05.2012, 16:10

А в чем отличие между Set и Set':
haskell Код:
data Record a = Atom a | Set a
type Set a = [Record a]

newtype Set' a = Set' [Either a (Set a)]
???
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Jean-Esther Jean-Esther вне форума
Member
 
Сообщений: 22
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.03.2009
По умолчанию 10.06.2012, 14:00

Тип Record a в коде снизу изоморфен типу Either a (Set a) при любом a:
haskell Код:
data Record a = Atom a | SetRecord (Set a)
type Set a = [Record a]

newtype Set' a = Set' [Either a (Set a)]

toRecord :: Either a (Set a) -> Record a
toRecord (Left x) = Atom x
toRecord (Right y) = SetRecord y

fromRecord :: Record a -> Either a (Set a)
fromRecord (Atom x) = Left x
fromRecord (SetRecord y) = Right y
Обрати внимание: конструктор Record-a SetRecord имеет свой аргумент типа Set a.
В твоем же коде конструктор Record-a назывался Set и его тип аргумента a, т.е. в твоем коде слово Set в определении типа обозначал конструктор, а не синоним типа.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Появилось окно с ошибкой: "Insert the "Tray App" disk and click OK". Anita_2 Техническая поддержка 6 14.12.2014 14:20
Ставлю систему "с нуля" после сбоя. Какие "работы" по тестированию железа полезны? russcand Любые вопросы от новичков 14 01.09.2011 00:27
Проблема по теме "Файлы". Определить сколько раз заданные слова встречаются в тексте. Nougami Pascal 0 16.04.2011 05:22
После подключения кнопок "power" и "reset" компьютер перестал включаться. Лаборант-Шурупов Любые вопросы от новичков 1 25.01.2009 15:15
Простые базы данных (вентили "И" "ИЛИ") IvoUse Prolog 6 20.04.2007 10:04
Добавить кнопки "свернуть" и "восстановить" к окну готового dialog-based приложения Lesat Visual C++ 2 07.01.2006 04:34
Как при использовании "курсора" определить конец таьлицы Anonymous Другие СУБД 4 17.02.2005 13:24
Помогите "Определить, является ли граф двудольным" altex Prolog 1 20.12.2004 09:30
Как сделать чтобы вместо кнопок "Да" и "Нет" высвечивалось украинсие "Так" и "Ні" Форсаж Delphi 5 19.07.2003 19:30
Создание программы на С++, "Структура данных и Алгоритм"" Curt Вопросы начинающих программистов 1 30.05.2003 12:17



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов