Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Haskell Незапуск некоторых wxhaskell программ Все образцы программ из папки wxhaskell-0.11.1.2/samples/ я спокойно компилирую и запускаю в любых разновидностях Ubuntu (правда, пришлось отдельно скачать haskell98-2.0.0.1.tar.gz и подкладывать Directory.hs, List.hs, удалив из них упоминание про #if __GLASGOW_HASKELL__ >= 701 и #endif ), но это почему-то не относится ни к wxhnotepad-1.2.0, ни к GeBoP, ни к Arctic Slide. Скомпилировать,... https://www.cyberforum.ru/ haskell/ thread928036.html Haskell Совместим ли Haskell с другими языками?
Очень заинтересовался функциональным программированием, даже несколько простых примеров разобрал. Считаю, что у каждого языка есть свои плюсы и надо их использовать, так сказать с миру по нитки. Назрел у меня такой вопрос: Возможно ли написать часть кода на Хаскеле, а часть например на С#? Например в С# я часто делаю графическое оформление, а логику и алгоритмы подключаю через dll другого...
Haskell Монада State на примере Читал статью про монады Кирпичёва, в частности, застрял на монаде State (почти не понял) и программе с её участием. Рассмотрим, например, программу, реализующую метод Монте-Карло. Для этого ей понадобится датчик случайных чисел, обладающий состоянием. Тогда для этой программы «a» будет соответствовать типу результата – например, числу успешных экспериментов – а «s» будет представлять внутреннее... https://www.cyberforum.ru/ haskell/ thread922952.html Haskell Задача коммивояжера любым методом https://www.cyberforum.ru/ haskell/ thread920375.html
Реобходимо реализовать задачу коммивояжера любым удобным методом, может делал ктонибудь уже?
FFI c/c++ импорт структур по человечески Haskell
Меня интересует импорт С и С++ структур в Хаскель Я знаю 1 способ это сделать: struct a{ int f1; int f2; }; typedef struct a A; A* makeA(int f1, int f2){
Haskell Создание типов в Haskell Снова здравствуйте. Продолжаю разбирать статью о Haskell, поэтому продолжу раздражать радовать вас свои нубскими вопросами. Имеется код data Complex' = Num a => Complex' { real' :: a, imag' :: a} c = Complex' 2.0 3.5 z = Complex' { real' = 4.0, imag' = 8.0} Который не компилируется, ошибка в первой строке в трёх экземплярах Not in scope: type variable `a' Прошу объяснить, как это... https://www.cyberforum.ru/ haskell/ thread918790.html
Haskell Правильная расстановка отступов Здравствуйте. Дан простой код, в котором я никак не могу правильно расставить отступы. GHCi возражает одной из этих ошибок parse error on input `xs' parse error on input `=' Вот сам код: evenSum :: -> Integer evenSum l = accumSum 0 l accumSum n l = if l == https://www.cyberforum.ru/ haskell/ thread918642.html Haskell Установка ghc 7.6.3
Решил установить новую версию платформы на убунту и тут же получил ошибку. Кто нибудь встречался с подобным? checking for path to top of build tree... utils/ghc-pwd/dist-install/build/tmp/ghc-pwd: error while loading shared libraries: libgmp.so.3: cannot open shared object file: No such file or directory configure: error: cannot determine current directory Вариант фикса с интернета ...
Haskell Поиск цикла в графе Здравствуйте! У меня такой вопрос. Пишу на хаскеле программу, которая для деревьев производит поиск в глубину. Связь двунаправленная. Сам граф хранится в списке списков смежных вершин. Чтобы задать дерево, мне нужно сделать проверку на циклы. Подскажите пожалуйста алгоритм поиска цикла. https://www.cyberforum.ru/ haskell/ thread909746.html Haskell Класс ассоциативных массивов https://www.cyberforum.ru/ haskell/ thread906927.html
Как сделать класс для таких понятий, у которых должно быть два параметра, например, тип ключа и тип значения у ассоциативного массива? Не используя расширения языка. Наверняка же люди часто сталкиваются с такими понятиями и для этого уже придумано готовое решение.
Списки на Хаскель Haskell
даны списки L1,L2,L3. Если L1 является префиксом L2, а L3 - суффиксом L2, то ответ yes, иначе - no. Есть программы на прологе и лиспе. Работает или нет она не важно. Главное, что ее приняли. нужно переписать их на Хаскель. Помогите, пожалуйста! domains. list=integer* predicates. prefics(list,list). ;префикс sufics(list,list). ;суффикс yes(list,list,list). ;предикат определяющий ответ
Haskell Списки на Хаскель даны списки L1,L2,L3. Если L1 является префиксом L2, а L3 - суффиксом L2, то ответ yes, иначе - no. Есть программы на прологе и лиспе. Работает или нет она не важно. Главное, что ее приняли. нужно переписать их на Хаскель. Помогите, пожалуйста! domains. list=integer* predicates. prefics(list,list). ;префикс sufics(list,list). ;суффикс yes(list,list,list). ;предикат определяющий ответ https://www.cyberforum.ru/ haskell/ thread903600.html
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
03.08.2013, 20:55 0

Упражнение про IO (игра в кости) - Haskell - Ответ 4912438

03.08.2013, 20:55. Показов 2462. Ответов 6
Метки (Все метки)

Ответ

Цитата Сообщение от ЯНикита Посмотреть сообщение
Можно сделать функцию game :: [Int] -> Int -> Player -> Player -> IO Player и выводить результаты прямо в ней? Или она должна возвращать список промежуточных результатов и быть чистой?
Можно сделать и так, и так. Расскажу про второй вариант.

По сути, у нас в игре есть состояние — это номер хода, есть лог действий, есть неизменяемое состояние — это количество очков для победы. Под эти сущности подходят монады State, Writer и Reader, которые комбинируется с помощью Monad Transformers.

Код достаточно сложен для первого понимания, бОльшую часть в нём занимают описания структур данных и вспомогательных функций, логика же игры осталась неизменной.

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
50
51
52
53
54
55
56
57
import System.Random
 
import Control.Monad.Identity
import Control.Monad.Writer
import Control.Monad.State
import Control.Monad.Reader
 
import Text.Printf
 
data Player = Player { score :: Int, name :: String }
 
mkPlayer :: String -> Player
mkPlayer name = Player { score = 0, name = name }
 
data GameState = GameState { currTurn :: Player, prevTurn :: Player, rolls :: [Int], turn :: Int }
 
mkGameState :: String -> String -> [Int] -> GameState
mkGameState p1 p2 rs = GameState { currTurn  = mkPlayer p1
                                 , prevTurn  = mkPlayer p2
                                 , rolls     = rs
                                 , turn      = 1
                                 }
 
type Game = ReaderT Int (StateT GameState (WriterT [String] Identity)) ()
 
execGame :: GameState -> Int -> [String]
execGame state threshold = runIdentity (execWriterT (execStateT (runReaderT game threshold) state))
 
nextTurn :: GameState -> GameState
nextTurn state = state { currTurn = prevTurn state
                       , prevTurn = currTurn' { score = newScore }
                       , rolls    = tail (rolls state)
                       , turn     = turn state + 1
                       }
    where currTurn' = currTurn state
          newScore  = score currTurn' + head (rolls state)
 
game :: Game
game = do
  threshold <- ask
  turn <- gets turn
  curr <- gets currTurn
  prev <- gets prevTurn
  tell [printf "Turn %d. %s - %d, %s - %d." turn (name curr) (score curr) (name prev) (score prev)]
  if score prev > threshold
  then tell [printf "%s wins with score %d." (name prev) (score prev)]
  else do
    modify nextTurn
    game
 
diceRoll :: Int -> Int
diceRoll x = 1 + x `mod` 6
 
main :: IO ()
main = do
  stdGen <- newStdGen
  mapM_ putStrLn $ execGame (mkGameState "John" "Peter" (map diceRoll (randoms stdGen))) 99
Использование монад в данном случае необязательно, можно было бы переписать мой предыдущий пример так, чтобы функция game возвращала не Player, а список промежуточных результатов.

Грязную версию game с Monad Transformers можно получить из предыдущей, заменив WriterT [String] Identity на IO, а tell на putStrLn. Соответственно придется внести изменения в execGame.

Вернуться к обсуждению:
Упражнение про IO (игра в кости) Haskell
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.08.2013, 20:55
Готовые ответы и решения:

Игра в кости
Здравствуйте, не могли бы вы написать простенькую программу? Просто в C++ не шарю, а к зачету нужно...

Игра в кости
Помогите, пожалуйста, с заданием, не совсем могу разобраться как его делать( Разработать “игру в...

Игра кости
Помогите пожалуйста. #include &lt;stdio.h&gt; #include &lt;time.h&gt; #include &lt;stdlib.h&gt; #include...

Игра в кости
Написать программу, которая имитирует игру в кости. Игроки (2 человека) кидают по 2 кубика...

6
03.08.2013, 20:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.08.2013, 20:55
Помогаю со студенческими работами здесь

Игра в кости
Написать игру в которой имитируется бросание кубиков игроком. Игра должна представлять собой...

Игра в кости C++
Написать программу, которая имитирует игру в кости. Игроки (2 человека) кидают по 2...

Игра в кости
НУжно написать на C++ игру в кости,консольную,с использованием генератора случайных чисел. т.е...

Игра в кости
всем привет. я недели 3 учусь писать на с++. в моей программе почему то переменная int дает...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru