Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
21 / 3 / 0
Регистрация: 04.11.2012
Сообщений: 21

Функции для работы со списками и игральные карты

04.11.2012, 13:44. Показов 6857. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Помогите осилить Хаскель, буду ужасно благодарен. Нужно сдать 2 лабы, иначе летит вся учеба( 5 курс(

1 задача уже была рассмотрена.

1. isMinor - проверяет что её аргумент - младшая карта
2. sameSuit - проверяет, что переданные в неё карты одной мати
3. beats:: Card -> Card -> Bool - проверяет, что карта, переданная в качестве первого аргумента бьёт карту, являющуюся вторым аргументом
4. beats2 (аналогичная) - но принимает в качестве дополнительного аргумента козырную масть
5. beatsList - принимает в качестве аргументов список карт, карту и козырную масть и возвращающая список тех карт из списка, которые бьют указанную карту с учётом козырной масти
6. функция, по заданному списку карт возвращает список чисел, каждое из которых возможная сумма очков указанных карт, рассчитанных по правилам игры в 21 очко: младшие карты считаются по номиналу, валет дама и король за 10 очков, туз может рассматриваться как 1 и как 11 очков. Ф-я должна вернуть все возможные варианты

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
data Mast = Diamonds | Hearts | Clubs | Spades deriving (Eq, Ord, Show)
 
data Dostoinstvo = Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten | Jack | Queen | King | Ace deriving (Eq, Ord, Show)
 
data Karta = Karta Dostoinstvo Mast deriving (Eq, Ord, Show)
 
isMinor :: Karta -> Bool
isMinor (Karta x y) = if (x==Jack)||(x==Queen)||(x==King)||(x==Ace) then False else True
 
beats :: Karta -> Karta -> Bool
beats (Karta x1 y1) (Karta x2 y2) = if (y1==y2)&&(x1>x2) then True else False
 
beats2 :: Mast -> Karta -> Karta -> Bool
beats2 y (Karta x1 y1) (Karta x2 y2) = if (((y1==y2)&&(x1>x2))||(((y1==y)||(y2==y))&&(x1>x2) )||((y1==y)&&(y2/=y))) then True else False
 
sameSuit :: [Karta] -> Bool
sameSuit (Karta f1 s1 : (Karta f2 s2 : xs)) = if (s1==s2) then sameSuit (Karta f2 s2 : xs) else False
sameSuit xs = if xs==[] then False else True
 
beatsList :: [Karta] -> Karta -> Mast -> [Karta]
 
beatsList cs card koz = go cs []
 
where go (x:xs) acc = go xs (if beats2 koz x card then x:acc else acc)
 
go [] acc = acc
 
ochki :: Dostoinstvo -> [Integer]
ochki Two = [2]
ochki Three = [3]
ochki Four = [4]
ochki Five = [5]
ochki Six = [6]
ochki Seven = [7]
ochki Eight = [8]
ochki Nine = [9]
ochki Ten = [10]
ochki Jack = [10]
ochki Queen = [10]
ochki King = [10]
ochki Ace = [1, 11]
 
points :: [Karta] -> [Integer]
points xs = let { nub (x:xs) acc = nub [x1 | x1 <- xs, x1/=x] (x:acc);
nub _ acc = acc }
in nub (rec' [] xs) []
where rec' rs [] = rs
rec' [] (Karta x _: xs) = rec' (ochki x) xs
rec' rs (Karta x _: xs) = rec' [r+a | a <- ochki x, r <- rs] xs
Первые 3 функции мне понятны. Кто нибудь объяснит в деталях как работают последние 3. Я знаю что означают знаки по отдельности, но вместе я не могу объяснить. Лучше с примером. Буду ужасно благодарен!!!Могу даже помочь wmr

и 2 задача. Решений я не нашел. Помогите решить и разобрать.

Функции для работы с типом List. Для введенного ранее типа
List определите следующие функции:
1) lengthList, возвращающую длину списка типа List.
2) nthList, возвращающую n-й элемент списка.
3) removeNegative, которая из списка целых (тип List Integer) удаляет отрицательные элементы.
4) fromList, преобразующую список типа List в обычный список.
5) toList, преобразующую обычный список в список типа List.
На Haskell.

Жду вашей помощи!!! спасибо!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.11.2012, 13:44
Ответы с готовыми решениями:

Функции для работы со списками и кортежами
Здравствуйте, дорогие форумчане, подскажите пожалуйста, я запнулся и не понимаю как сделать правильно. Само задание: 1) Попросите...

Списки: функции для работы со списками
Помогите пожааааааалуйста с задачками!!!! ;) ОПИШИТЕ ФУНКЦИИ ТИПОВЫХ ОПЕРАЦИЙ С СПИСКАМИ: 1. Функция AddHead (int d) добавление узла...

Описать процедуры или функции для работы со списками
Описать процедуру или функцию которая: 1) в списке L переставляет в обратном порядке все элементы между первым и последним вхождениями...

10
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
04.11.2012, 14:13
Цитата Сообщение от babai2010 Посмотреть сообщение
Для введенного ранее типа List
- где этот тип?
0
21 / 3 / 0
Регистрация: 04.11.2012
Сообщений: 21
04.11.2012, 14:17  [ТС]
ой чтото я недоглядел. вот в начале его описание.

Список также является рекурсивным типом. Рассмотрим следующий полиморфный тип:
Haskell
1
data List a = Nil | Cons a (List a)
Значение типа List a либо пусто (Nil), либо содержит элемент типа a и значение типа List a. Нетрудно заметить прямую аналогию со списками, которые также либо пусты ([]), либо содержат голову типа a и хвост, являющийся также списком. Сходство станет еще очевиднее, если конструктор Cons записать в инфиксном виде:
Haskell
1
data List a = Nil | a ‘Cons‘ (List a)
Таким образом, списочный тип мог бы быть определен следующим об-разом:
Haskell
1
-- Это не настоящий код языка Haskell data [a] = [] | a : [a]
Для значений типа List можно определить все функции, определен-ные для списков. Приведем примеры функций head, tail и map:
Haskell
1
2
3
4
headList (Cons x _) = x
headList Nil    = error "headList: empty list"
tailList (Cons _ y) = y
tailList Nil    = error "tailList: empty list"
Проиллюстрируем работу этих функций:
Haskell
1
2
Main>headList (Cons 1 (Cons 2 Nil)) 1
Main>tailList (Cons 1 (Cons 2 Nil)) Cons 2 Nil
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
04.11.2012, 16:32
Держи:

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
data MyList a = Nil | a `Cons` (MyList a) deriving Show
 
headList :: MyList a -> a
headList (Cons x _) = x
 
tailList :: MyList a -> MyList a
tailList (Cons _ y) = y
 
lengthList :: MyList a -> Int
lengthList Nil = 0
lengthList (Cons _ x) = 1 + lengthList x 
 
nthList :: MyList a -> Int -> a
nthList x 1 = headList x
nthList x n = nthList (tailList x) (n-1) 
 
fromList :: MyList Int -> [Int]
fromList Nil = []
fromList (Cons x y) = x : (fromList y)
 
toList :: [Int] -> MyList Int
toList [] = Nil
toList (x:xs)= (Cons x (toList xs))
 
removeNeg :: MyList Integer -> MyList Integer
removeNeg Nil = Nil
removeNeg (Cons x y) | (x < 0) = removeNeg y
                     | otherwise = (Cons x (removeNeg y))
2
21 / 3 / 0
Регистрация: 04.11.2012
Сообщений: 21
04.11.2012, 16:37  [ТС]
огромное спасибо. Снизойдите до того чтобы расписать по полочкам каждую строчку. Что она делает в 1-ом и 2-ом задании. буду ужасно признателен. Могу высказать благодарность рублями если уместно или ещё чем то ?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
04.11.2012, 16:43
Вторую задачу распишу чуть позже. Первую пока не берусь...
0
 Аватар для Сtrl
144 / 134 / 8
Регистрация: 19.07.2011
Сообщений: 184
05.11.2012, 02:20
Цитата Сообщение от Catstail Посмотреть сообщение
Держи
Индексация начинается с нуля, да и ошибки неплохо бы обрабатывать. У меня получилось так:
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
data List a = Nil | Cons a (List a)
 
instance Show a => Show (List a) where
    show = show . toList
 
headList (Cons x _) = x
headList Nil = error "headList: empty list"
 
tailList (Cons _ xs) = xs
tailList Nil = error "tailList: empty list"
 
lengthList Nil = 0
lengthList xs = succ $ tailList xs
 
nth Nil _ = error "nth: index too large"
nth xs 0 = headList xs
nth xs n =
    if n < 0
        then error "nth: negative index"
        else nth (tailList xs) (pred n)
 
removeNegative = filterList (not . (<0))
 
filterList p Nil = Nil
filterList p (Cons x xs) =
    (if p x then (Cons x) else id) $ filterList p xs
    
fromList [] = Nil
fromList (x:xs) = Cons x (fromList xs)
 
toList Nil = []
toList (Cons x xs) = x : (toList xs)

Цитата Сообщение от babai2010 Посмотреть сообщение
огромное спасибо. Снизойдите до того чтобы расписать по полочкам каждую строчку. Что она делает в 1-ом и 2-ом задании. буду ужасно признателен. Могу высказать благодарность рублями если уместно или ещё чем то ?
Построчно объяснять что-то смысла не имеет - действия здесь простые, а насколько вы знакомы с языком - неясно. Если совсем никак - можно, конечно, все до мельчайших деталей разъяснить, но объем материала большой. Пишите в личные сообщения, если что, заодно и оплату обсудить можно.
2
21 / 3 / 0
Регистрация: 04.11.2012
Сообщений: 21
05.11.2012, 11:17  [ТС]
к сожалению я не могу писать ЛС, видимо меня ещё не активировали( желательно как можно подробнее, если есть аська или скайп напишите.
0
05.11.2012, 16:09

Не по теме:

ICQ нет, в Скайпе только по выходным, можно в Jabber или ВК.

0
05.11.2012, 17:36  [ТС]

Не по теме:

напиши в вк, http://vk.com/id8521990 жду.

0
 Аватар для Сtrl
144 / 134 / 8
Регистрация: 19.07.2011
Сообщений: 184
06.11.2012, 22:55
На 13-й строке моего решения ошибка. Должно быть так:
Haskell
1
lengthList xs = succ (lengthList . tailList $ xs)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.11.2012, 22:55
Помогаю со студенческими работами здесь

игральные карты на С++
привет! помогите, пожалуйста: Мастям игральных карт условно присвоены следующие порядковые номера: «пики» -1, «трефы» – 2, «бубны» –...

Игральные карты !!
Мастям игральных карт присвоены порядковые номера: 1 — пики, 2 — трефы, 3 — бубны, 4 — червы. Достоинству карт, старших десятки, присвоены...

Игральные карты
Здравствуйте помогите решить задачу!!! Игральным картам присвоены следующие порядковые номера в зависимости от их достоинства:...

Игральные карты
Здравствуйте. Нужна ваша помощь. Сколько существует способов выбрать 5 карт из 52 так, чтобы получились следующие наборы: а) десятка,...

Как задействовать и применить стандартные игральные карты Windows?
Как задействовать и применить стандартные игральные карты Windows в VC#?


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru