Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Haskell
Перезагрузить страницу База данных идентификаторов программы представляет собой список пар
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
imported_pepper imported_pepper вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.11.2010
Red face База данных идентификаторов программы представляет собой список пар - 07.11.2010, 21:28

Помогите,пожалуйста,с лабораторной работой!

База данных идентификаторов программы представляет собой список пар, состоящих из имени идентификатора и его типа.Разработайте тип данных,представляющий описанную информацию.
Определите следующие функции:

1)isStructured, проверяющая, что ее аргумент явлеяется сложным типом.
2)getType,по заданному имени и списку идентификаторов(базе данных) возвращающая тип идентификатора с указанным именем (помните что такого идентификатора в базе может и не оказаться)
3)getFields, по заданному имени возвращающая списко полей идентификатора если он имеет тип структуры.
4)getByType возвращающая список имен идентификаторов указанного типа из базы данных.
5)getByTypes,аналогичная предыдущей но принимающей вместо типа список типов(с помощью этой функции можно получить например список всех идентификаторов с числовым типом).

Очень большое задание получилось если кто сможет помочь,буду очень благодарна!
Ответить с цитированием
  (#2 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 08.11.2010, 10:02

здесь


Don't fear the Monad
Ответить с цитированием
  (#3 (permalink)) Старый
imported_pepper imported_pepper вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.11.2010
По умолчанию 08.11.2010, 16:24

действительно.и не заметила.спасибо огромное!
Ответить с цитированием
  (#4 (permalink)) Старый
imported_pepper imported_pepper вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.11.2010
Talking 08.11.2010, 19:26

а как реализовать это задание с помощью функций высшего порядка,исключая из определений функций явный проход по списку?
Ответить с цитированием
  (#5 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 09.11.2010, 15:19

Цитата:
Сообщение от pepper Посмотреть сообщение
а как реализовать это задание с помощью функций высшего порядка,исключая из определений функций явный проход по списку?
[cpp]
import Data.Maybe
import Control.Applicative

getBy f s t = fmap t . s . filter f

getType s xs = getBy ((s ==) . fst) listToMaybe (tip_to_en . snd) xs

getFields s = getBy (\(s', st) -> isStructured st && s == s') listToMaybe (fieldOf . snd) where
identOf (Struct s _) = s
fieldOf (Struct _ f) = f

getByType x = getBy ((x ==) . tip_to_en . snd) id fst

getByTypes = (. flip getByType) . flip concatMap
[/cpp]


Don't fear the Monad
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 24.11.2010, 22:31

haskell Код:
import Data.Maybe
import Control.Applicative

data SimpleTip = Int1 Integer | Double1 Double | String1 String deriving (Eq, Show)

data En = Integ | Doub | Str | Structure deriving (Eq, Show)

data Tip = Struct String [(String, SimpleTip)] | Var SimpleTip deriving (Eq, Show)

isStructured :: Tip -> Bool
isStructured (Struct _ _)= True
isStructured _ = False

tip_to_en :: Tip-> En
tip_to_en (Struct _ _) = Structure
tip_to_en (Var (Int1 _)) = Integ
tip_to_en (Var (Double1 _)) = Doub
tip_to_en (Var (String1 _)) = Str

getBy f s t = fmap t . s . filter f

getType s xs = getBy ((s ==) . fst) listToMaybe (tip_to_en . snd) xs

getFields s = getBy (\(s', st) -> isStructured st && s == s') listToMaybe (fieldOf . snd) where
  identOf (Struct s _) = s
  fieldOf (Struct _ f) = f

getByType x = getBy ((x ==) . tip_to_en . snd) id fst

getByTypes = (. flip getByType) . flip concatMap


Don't fear the Monad
Ответить с цитированием
  (#7 (permalink)) Старый
Die_hard Die_hard вне форума
Member
 
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.10.2010
По умолчанию 25.11.2010, 21:28

calabi-yau, спасибо большое! не могли бы вы только прокоментировать эти две строчки:

haskell Код:
import Data.Maybe
import Control.Applicative

это очень необходимо?! тут идёт что-то вроде подключения библиотек функций в си?!
Ответить с цитированием
  (#8 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 25.11.2010, 22:29

Цитата:
Сообщение от Die_hard Посмотреть сообщение
это очень необходимо?!
для универсальной функции getBy да. но, можно убрать import Data.Maybe, если добавить:
haskell Код:
listToMaybe (x:_) = Just x
listToMaybe _     = Nothing

Цитата:
тут идёт что-то вроде подключения библиотек функций в си?!
да.


upd: хотя, fmap находиться в пространстве prelude, то можно и import Control.Applicative убрать.


Don't fear the Monad
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
База данных об объектах, поиск объектов по признакам. База хранится в файле. znakos Prolog 1 16.04.2012 20:47
База данных список студентов frollo Pascal 1 13.07.2011 10:56
База данных в VB.net MAGZHAN .NET 1 20.02.2011 07:04
База данных man1ac Delphi 1 16.08.2010 17:42
Создание класса представляющего собой список ErgoProxy C++ Builder 2 27.07.2010 01:31
База данных идентификаторов программы kaffetka1841 Haskell 29 17.12.2009 22:51
База данных Valja Prolog 7 08.04.2009 08:06
Что собой представляет материнская плата Mini-ATX ? AtomoS Материнские платы 5 04.08.2008 10:54
База данных. gard Prolog 5 02.12.2006 21:21
Получение данных из поля типа Memo база данных MS ACCESS Лукашин Дмитрий Visual C++ 1 14.07.2004 03:12
База данных и сортировка данных -=MonstriK=- Delphi 2 26.04.2004 09:55
База данных на С++ Anonymous С/С++ 0 12.03.2003 20:17



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