Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 25.11.2011
Сообщений: 16
1

Вывести дату с помощью show

08.07.2012, 14:27. Показов 1807. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
добрый день, пробую изучать Haskell, столкнулся с проблемой на начальном этапе не могу вывести дату с помощью show в этом коде:
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
27
28
29
30
31
32
33
34
module Calendar where
 
import Prelude (Int, Char, String, Show(..), (++))
--Дата
data Date = Date Year Month Day
--Год
data Year = Year Int
--Месяц
data Month = January    | February  | March   | April
             | May      | June      | July    | August
             |September | October   |November | Desember
--День
data Day = Day Int
instance Show Date where
   show (Date d mon y) = show d ++ "." ++ show mon ++ "." ++ show y
instance Show Day where
   show (Day d) = addZero (show d)
 
instance Show Month  where
   show January   = "01"
   show February  = "02"
   show March     = "03"
   show April     = "04"
   show May       = "05"
   show June      = "06"
   show July      = "07"
   show August    = "08"
   show September = "09"
   show October   = "10"
   show November  = "11"
   show Desember  = "12"
 
instance Show Year where
   show (Year y) = show y
собственно... как связать mon с Month и вывести все это?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.07.2012, 14:27
Ответы с готовыми решениями:

Вывести дату с помощью функции 70h
Есть программа которая выводит дату через 1Аh, но препод забраковал и сказал сделать через 70h и...

Как выполнить вывод с помощью метода show?
КЛАССЫ, ОБЪЕКТЫ, НАСЛЕДОВАНИЕ подскажите как выполнить вывод с помощью метода show.. using...

если в коде ниже ob->show(); -> возвращает указатель "p" в "ob"? то почему для доступа к show не пишут так ob->->show();
#include <exception> #include <iostream> #include <string> #include <sstream> using namespace...

Ввести одну дату и вывести дату следующего дня
Ограничиться условными операторами. Не использовать библиотеки time, datetime етц

5
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
08.07.2012, 14:43 2
Антон, здравствуйте. Вы забыли добавить в пример определение функции addZero, которое имеется в Вашей книге:
Haskell
1
2
3
addZero :: String -> String
addZero (a:[]) = '0' : a : []
addZero as     = as
Haskell
1
2
*Calendar> Date (Year 2012) July (Day 8)
2012.07.08
Ещё советую обратить внимание на последовательность год-месяц-день в определении типа и в функции show для экземпляра Date:
Haskell
1
2
3
4
5
data Date = Date Year Month Day
{- ... -}
instance Show Date where
-- Может быть, надо show (Date y mon d) = ...
   show (Date d mon y) = show d ++ "." ++ show mon ++ "." ++ show y
1
0 / 0 / 0
Регистрация: 25.11.2011
Сообщений: 16
08.07.2012, 14:47  [ТС] 3
нет, addZero у меня был я просто неправильно выводил дату, спасибо))
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
09.07.2012, 03:51 4
Как-то не очень красиво месяц выводится. Лучше так:
Haskell
1
2
3
4
5
6
7
8
9
10
11
data Month = January   | February  | March    | April
           | May       | June      | July     | August
           | September | October   | November | December
             deriving (Eq, Ord, Enum, Bounded)
 
instance Show Month where
    show = addZero . show . (+ 1) . fromEnum
 
addZero :: String -> String
addZero n@[d] = '0' : n
addZero n     = n
1
0 / 0 / 0
Регистрация: 25.11.2011
Сообщений: 16
09.07.2012, 13:09  [ТС] 5
тогда может не в тему, но вопрос возник, если не делать import Prelude (список нужных классов), то интерпретатор делает это автоматом?
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4300 / 2091 / 431
Регистрация: 19.07.2009
Сообщений: 3,162
Записей в блоге: 24
09.07.2012, 17:11 6
import Prelude нужен лишь для того, чтобы выборочно что-то импортировать, пряча всё остальное. Или выборочно прятать (hiding), очищая пространство от неиспользуемых имён. По умолчанию из Prelude импортируется всё.

Ещё, если я правильно помню, при любом импорте обязательно импортируются все instance, описанные в модуле.
1
09.07.2012, 17:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2012, 17:11
Помогаю со студенческими работами здесь

Ввести одну дату и вывести дату следующего дня
Примеры: 1) Введите дату в программу, и она должна вывести вам дату следующего дня. (Например:...

Метод UserForm.Show при повторном выполнении .Show
При первом выполнении этого метода поисходит событие Activate_UserForm Как сделать, чтобы при...

Ввести № и дату с помощью формы
Мне нужно сделать чтобы при нажатии определеной комбинации клавиш появлялась форма, куда бы я ввел...

С помощью цикла определить дату
Привет всем! Подскажите кто чем может, пожалуйста. Вручную задается дата (дд.мм.гггг),...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru