Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
1339 / 982 / 309
Регистрация: 28.07.2012
Сообщений: 2,736
1

Экземпляры классов типов

26.03.2013, 19:18. Просмотров 705. Ответов 9
Метки нет (Все метки)

Помогите мне пожалуйста. Никак не могу разобраться...
Задание звучит так:
""""
Нужно определить класс типов Finite, который описывает типы данных с конечным множеством значений.
Для каждого типа а нужно определить функцию elements::[a], которая возвращает список значений типа a.
Сначало нужно определить экземпляр класса Finite для типа Bool - с этим все норм. А далее, для типа (a, b) где a и b - члены класса Finite. - Вот тут у меня запара.
"""
Первая часть идет легко
Haskell
1
2
3
4
5
class Finite a where
    elements :: [a]
    
instance Finite Bool where
    elements = [True, False]
Но вот вторая:
Haskell
1
2
3
4
instance (Finite a, Finite b) => Finite (a, b) where
    elements = [(x, y) | x<-i1, y<-i2] where
        i1 = elements::[a]
        i2 = elements::[b]
И ни в какую, сколько вариантов не перебрал - ничего. Как это дерьмо делается?
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2013, 19:18
Ответы с готовыми решениями:

Объекты и экземпляры классов
Здравствуйте, я читаю книгу &quot;Изучаем C#&quot; 3-e издание, Эндрю Стиллмена и Дженнифер Грина, так же...

Работа с указателями на экземпляры классов
чтото не пойму. Я могу както создать указатель, который указывал бы ка экземпляр класса (а не...

Объекты и экземпляры абстрактных классов
Здравствуйте, помогите, пожалуйста, разобраться: Суть в чем - экземпляры абстрактных классов...

Где создавать экземпляры классов?
Здравствуйте! Начал изучать WPF и появился у меня вопрос о переносе. Вот есть у меня класс, в...

9
162 / 162 / 22
Регистрация: 23.02.2011
Сообщений: 347
26.03.2013, 20:29 2
Лучший ответ Сообщение было отмечено как решение

Решение

Haskell
1
2
3
4
5
6
7
instance (F a, F b) => F (a,b) where
    elements = [(x,y) | x <- al, y <- bl]
        where
            al :: F a => [a]
            al = elements
            bl :: F b => [b]
            bl = elements
3
4201 / 3203 / 326
Регистрация: 12.03.2013
Сообщений: 5,696
26.03.2013, 20:30 3
Я попробовал пофиксить так, как предлагал ghci, помогло:
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
class Finite a where
    elements :: [a]
 
instance Finite Bool where
    elements = [True, False]
 
instance (Finite a) => Finite (Maybe a) where
    elements = Nothing : [Just x | x <- elements :: (Finite a) => [a]]
 
instance (Finite a, Finite b) => Finite (a, b) where
    elements = [(x, y) | x <- i1, y <- i2] where
        i1 = elements :: (Finite a) => [a]
        i2 = elements :: (Finite b) => [b]
Только я сам не понял, почему он контекст не берёт из первого описания. Он почему-то не отождествляет эти а.
1
1339 / 982 / 309
Регистрация: 28.07.2012
Сообщений: 2,736
26.03.2013, 20:37  [ТС] 4
Algiz, спасибо огромное. А можете пояснить, почему не сработал мой вариант. В чем там загвостка?

Добавлено через 3 минуты
Цитата Сообщение от helter Посмотреть сообщение
почему он контекст не берёт из первого описания.
У меня тоже возникали такие мысли. Но я просто не знал, как по другому переписать, просто знаний не хватает.
0
78 / 64 / 5
Регистрация: 25.03.2012
Сообщений: 71
26.03.2013, 22:13 5
Цитата Сообщение от nonedark2008 Посмотреть сообщение
И ни в какую, сколько вариантов не перебрал - ничего. Как это дерьмо делается?
Haskell
1
2
instance (Finite a, Finite b) => Finite (a, b) where
  elements = [(x, y) | x<-elements, y<-elements]
2
4201 / 3203 / 326
Регистрация: 12.03.2013
Сообщений: 5,696
26.03.2013, 22:14 6
calabi-yau, не требуется указывать тип результата, потому что он его из остальных сигнатур выводится?
0
78 / 64 / 5
Регистрация: 25.03.2012
Сообщений: 71
26.03.2013, 22:15 7
Цитата Сообщение от helter Посмотреть сообщение
calabi-yau, не требуется указывать тип результата, потому что он его из остальных сигнатур выводится?
Да, по видимому.
0
162 / 162 / 22
Регистрация: 23.02.2011
Сообщений: 347
27.03.2013, 00:02 8
nonedark2008, Понятия не имею. Я просто сделал то, что просил ghc
1
1339 / 982 / 309
Регистрация: 28.07.2012
Сообщений: 2,736
27.03.2013, 01:46  [ТС] 9
Algiz, понятно. И на том спасибо! А то я даже не понимал, что хотел компилятор >_>
0
Эксперт С++
5810 / 3461 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
28.03.2013, 06:29 10
Вариант с аппликативными функторами:

Haskell
1
2
3
4
5
6
7
8
9
10
11
import Data.Functor ((<$>))
import Control.Applicative
 
class Finite a where
    elements :: [a]
 
instance Finite Bool where
    elements = [True, False]
    
instance (Finite a, Finite b) => Finite (a, b) where
    elements = (,) <$> elements <*> elements
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2013, 06:29

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как использовать экземпляры классов МFC?
Такая проблема: С помощью MFC AppWizard создал проект, в котором редактируется некая...

Как положить в массив экземпляры классов?
Здравствуйте! Есть задача. У меня есть 2 класса FixedMonthlyCostPaidService и ...

Поместить экземпляры разных классов в один массив
Не пойму немного, это через List делается или иначе? Необходимо для дальнейшей сортировки и...

Map, List, работа со ссылками на экземпляры классов
Здравствуйте! Есть такой вопрос: если ли разница в том, каким образом делать .push_back(buf) в...

Как сериализовать/десериализовать экземпляры классов в файл
Проблема следующая: Имеется три класcа: class Class1 { // Список полей и методов } class...

Как сохранить экземпляры классов в один массив ?
Ребята, привет. Подскажите, пожалуйста, как решить задачу. Есть абстрактный класс. Есть два...


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

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

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