Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
antoxa5481
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 16
1

Haskell Функция с несколькими переменными и циклом

07.12.2017, 17:53. Просмотров 334. Ответов 5

Прошу помочь мне написать функцию. Вначале нужно объявить три переменные, затем проделать цикл. Два условия выхода из цикла:
Haskell
1
if current == -1 then return secretWord
Haskell
1
last checked ==4 then return "ok"
После цикла должна выводиться переменная checked
С языком знаком очень слабо, поэтому написано плохо. getBullCows - функция, созданная ранее.
Вот сам код:
Haskell
1
2
3
4
5
6
7
8
9
10
11
bullсow = 
 let secretWord = RandomRIO (1000, 9999) in secretWord
 let current = 0 in current
 let checked = [] in checked
    do { print "Your Turn. Enter new number"
        ;current <- getLine
        ;if current == -1 then return secretWord 
        ;else let checked = getBullCows secretWord current in checked 
        ;if last checked == 4 then return "ok!"
        ;else print "Next Turn." }
 print checked
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2017, 17:53
Ответы с готовыми решениями:

Функция вывода структуры haskell
Есть структура data Figure = Tel String String String Int Int | Cheh String...

Функция сравнения на близость чисел / Haskell
Есть задача: Напишите функцию beside :: Nat -&gt; Nat -&gt; Bool , которая будет возвращать True только в...

Место ФП и Haskell в компьютерной индустрии (Для чего он нужен, этот Haskell?)
&quot;У нас&quot; ? А где преподавание этой экзотики на высоте? Добавлено через 2 минуты А где такие...

Функция на C++ -> Функция на Haskell
Добрый день! Step* get_moves_white(const Board&amp; board, Step* moves) { BitBoard movers, empty...

Как понять как работает эта функция в Haskell?
Я смотрю обучающее видео по haskell: https://www.youtube.com/watch?v=43zCXDb5dQ4&amp;t=1954s Там на...

5
Catstail
Модератор
24926 / 12648 / 2314
Регистрация: 12.02.2012
Сообщений: 20,590
07.12.2017, 20:06 2
А нельзя увидеть формулировку задания?
0
antoxa5481
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 16
07.12.2017, 20:53  [ТС] 3
Игра в быки и коровы. Суть кода взял с киберфорума. Если не ошибаюсь, то из вашего же сообщения отсюда:
Программа для игры «Быки и коровы»
Только переписал под huskell.
Вот весь код без того, что в сообщении:
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import Data.List
import Data.Maybe
import Debug.Trace
import System.Random
 
numberToList x 
 |x == 0 = []
 |otherwise = {-trace ("x div 10 = "++show (x `div` 10) ++" : x mod 10 = "++show (x `mod` 10)) $-} numberToList (x `div` 10) ++ [x `mod` 10]
 
getCows list1 list2 
 |length list1 == 0 =0
 |head list1 == head list2 = getCows (tail list1) (tail list2) + 1
 |otherwise = getCows (tail list1) (tail list2)
 
getBullCows number1 number2 = 
 let 
    list1 = numberToList number1
    list2 = numberToList number2
    c = getCows list1 list2
    b = length (intersect list1 list2) - c
 in [b]++[c]
0
Catstail
Модератор
24926 / 12648 / 2314
Регистрация: 12.02.2012
Сообщений: 20,590
07.12.2017, 21:16 4
Немного подрихтовал чистую часть кода:

Haskell
1
2
3
4
5
6
7
8
9
10
11
import Data.List
 
getCows [] [] = 0  
getCows (x:xs) (y:ys) | (x==y) = 1 + getCows xs ys
                      | otherwise = getCows xs ys
 
getBullCows number1 number2 = [b,c]
  where list1 = show number1
        list2 = show number2
        c = getCows list1 list2
        b = length (intersect list1 list2) - c
1
Curry
2993 / 2074 / 257
Регистрация: 01.06.2013
Сообщений: 4,527
Записей в блоге: 9
08.12.2017, 15:41 5
Цитата Сообщение от antoxa5481 Посмотреть сообщение
Вначале нужно объявить три переменные, затем проделать цикл.
В Haskell нет переменных и циклов.

Игра "Коровы и Быки"

Добавлено через 16 часов 43 минуты
Быки и коровы без использования списков (кроме строк для вывода)
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
import Numeric
import System.Random 
    
isCow :: Int -> Int -> Bool
isCow what v = case v `divMod` 10 of
                    (_,m) | m == what -> True
                    (0,_) -> False
                    (d,_) -> isCow what d   
 
extractBulls :: Int -> Int -> (Int,Int,Int)
extractBulls 0 _ = (0,0,0)
extractBulls x y = let (d,m) = x `divMod` 10 
                       (e,n) = y `divMod` 10 
                       (b,x',y') = extractBulls d e
                   in if m == n then (b+1,x',y')
                      else (b, x'*10+m, y'*10+n)
 
getBullCows :: Int -> Int -> (Int,Int)
getBullCows secret t = (b,go 0 y)
    where (b,x,y) = extractBulls secret t
          go c 0 = c
          go c v = let (d,m) = v `divMod` 10 
                   in go (if isCow m x then c+1 else c) d
    
main :: IO () 
main = do
    secret <- randomRIO (1000::Int,9999)
    print secret
    let game = do
            putStr "? "
            x <- readLn
            if x == -1 then putStr "secret = " >> print secret
            else let (b,c) = getBullCows secret x in
                 if b == 4 then putStrLn "You won!"
                 else do
                    putStrLn $ showString "Bulls " $ showInt b $
                               showString ",  cows " $ showInt c ""
                    game
    game

Не по теме:

Печально что популярность Haskell резко пошла на убыль. Это и по активности данного раздела видно,
и по статистике в интернете. :(

0
loothood
08.12.2017, 16:23     Haskell Функция с несколькими переменными и циклом
  #6

Не по теме:

Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Печально что популярность Haskell резко пошла на убыль. Это и по активности данного раздела видно,
и по статистике в интернете.
Другого и не ожидалось. Хорошо что от хаскелла другие языки переняли положительные черты.

0
08.12.2017, 16:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2017, 16:23
Привет! Вот еще темы с ответами:

Цикл с несколькими переменными
Доброго времени суток! Помогите! Необходимо в maple задать цикл с несколькими переменными....

Построение графиков с несколькими переменными
Здравствуйте, не могли бы подсказать, каким образом можно связать уравнение с набором переменных,...

Правильный редирект с несколькими переменными GET
Не могу сделать правильный редирект. Почему то не нашел конкретного примера в сети. Прошу помощи! ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.