Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Haskell
Перезагрузить страницу Нужно реализовать следующий код, используя функции высших порядков
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
belkaonrain belkaonrain вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.12.2010
По умолчанию Нужно реализовать следующий код, используя функции высших порядков - 05.12.2010, 23:56

Ребята, помогите, пожалуйста, с заданием!! Нужно реализовать следующий код, используя функции высших порядков, постараться полностью исключить из определений функций явный проход по списку

data Mast = Vini |Bubi |Kresti | Chervi deriving (Eq, Show)
data Mladshaia = Mladshaia Integer Mast deriving (Eq, Show)
data Kartinka = Valet Mast | Dama Mast | Korol Mast | Tuz Mast deriving (Eq, Show)
data Karta = Mlad Mladshaia | Star Kartinka deriving (Eq, Show)

isMinor :: Karta -> Bool
isMinor (Mlad _) = True
isMinor (Star _) = False

***getSuit :: Karta -> Mast
getSuit (Mlad (Mladshaia _ x)) = x
getSuit (Star (Valet x)) = x
getSuit (Star (Dama x)) = x
getSuit (Star (Korol x)) = x
getSuit (Star (Tuz x)) = x

sameSuit :: [Karta] -> Bool
sameSuit [x] = True
sameSuit (x:y:xs) = (getSuit(x) == getSuit(y)) && sameSuit (y:xs)

t = [(Mlad (Mladshaia 5 Vini)),(Mlad (Mladshaia 5 Vini)), (Star (Valet Bubi))]
s = [(Mlad (Mladshaia 5 Vini)),(Mlad (Mladshaia 5 Vini)), (Star (Valet Vini)) ]

***
getInteger :: Karta -> Integer
getInteger (Mlad (Mladshaia x _)) = x
getInteger (Star (Valet _)) = 11
getInteger (Star (Dama _)) = 12
getInteger (Star (Korol _)) = 13
getInteger (Star (Tuz _)) = 14

beats :: Karta -> Karta -> Bool
beats x y = (sameSuit[x,y]) && (getInteger(x) > getInteger(y))

***
beats2 :: Karta -> Karta -> Mast -> Bool
beats2 x y m = ((sameSuit[x,y]) && (getInteger(x) > getInteger(y))) || ((getSuit (x) == m) && not (getSuit(y)==m))

***
beatsList :: [Karta] -> Karta -> Mast -> [Karta]
beatsList [] y m = []
beatsList (x:xs) y m = if beats2 x y m then [x] ++ beatsList xs y m else beatsList xs y m

***
getInt :: Karta -> Integer
getInt (Mlad (Mladshaia x _)) = x
getInt (Star (Valet _)) = 10
getInt (Star (Dama _)) = 10
getInt (Star (Korol _)) = 10
getInt (Star (Tuz _)) = 11


getTuz :: [Karta] -> Integer
getTuz[]= 0
getTuz (Star (Tuz _):xs) = 1 + getTuz xs
getTuz (_:xs) = getTuz xs


igra :: [Karta] -> Integer
igra [] = 0
igra (x:xs) = getInt(x) + igra xs


g:: Integer -> Integer -> [Integer]
g a 0 = [a]
g a b = [a-b*10] ++ g a (b-1)

f :: [Karta] -> [Integer]
f (x) = g (igra(x)) (getTuz(x))
Ответить с цитированием
  (#2 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 06.12.2010, 16:20

Цитата:
Сообщение от belkaonrain Посмотреть сообщение
Ребята, помогите, пожалуйста, с заданием!! Нужно реализовать следующий код, используя функции высших порядков, постараться полностью исключить из определений функций явный проход по списку
haskell Код:
beatsList :: [Karta] -> Karta -> Mast -> [Karta]
beatsList cs c m = filter (\x -> beats2 m x c) cs

getTuz :: [Karta] -> Integer
getTuz xs = sum (map tuz xs) where
  tuz (Star (Tuz _)) = 1
  tuz _              = 0

igra :: [Karta] -> Integer
igra xs = sum (map getInt xs)


Don't fear the Monad
Ответить с цитированием
  (#3 (permalink)) Старый
belkaonrain belkaonrain вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.12.2010
По умолчанию 06.12.2010, 18:25

ооо. спасиибо огромнейшее ))) Вы меня очень выручили !!!
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто может то же самое написать через подпрограмму. и используя функции?( Новенькая22 Pascal 1 28.02.2012 07:13
Переделать программу, используя функции. nikko2709 С/С++ 1 13.12.2011 22:36
Выччислить значение функции используя процедуры imported_bert94 Pascal 1 15.06.2011 17:37
Вычисление функции x в степени y , используя только сложение Виолета Lisp 2 01.06.2011 16:03
Вычисление функции x в степени y , используя только сложение Виолета Lisp 3 22.05.2011 18:56
Стандартные функции высших порядков RosesOnGrave Python 0 06.03.2011 23:12
Нужно преобразовать таблицу и записать ее в следующий лист Domin Visual Basic 2 09.02.2011 16:50
Функции высших порядков zven_ Lisp 12 12.04.2010 14:26
Нужно создать модальное окно используя только винапи Angel5a WinAPI 7 02.03.2007 01:15
Нужно открывать файл, используя непосредственно класс CFile linanix Visual C++ 19 26.10.2006 12:04
Чтение INI файла используя функции ReadInteger,ReadString EvgenGluk C++ Builder 40 18.11.2005 11:57
Свойство формы StayOnTop используя API функции An_Life Delphi 1 11.03.2003 20:34



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