У меня проблема с Haskell. У меня есть простой код:Haskell и «петля» с защитой
petla szerokosc wysokosc pozycje = do
let plansza_x = oznacz_pola_dookola_jako_miejsca_na_skarby_wiele
pozycje
(utworz_plansze pozycje szerokosc wysokosc)
szerokosc
let x = make_list $ zlicz_x plansza_x
guard ((sprawdz_kombinacje2 plansza_x pozycje (head x) szerokosc wysokosc) == True)
x
Параметры хорошие, но GHCI возвращает мне что-то странное. Функция make_list
возвращает список строк, например: [['_','_'],['*','_'],['_','*'],['*','*']]
.
Я хочу, чтобы loop
получил первый элемент этого списка, вставьте его в качестве аргумента в sprawdz_kombinacje2
. Если эта функция возвращает False
, она получит чистый элемент из списка. В противном случае функция petla
должна вернуть строку, например: ['_','*']
.
Проблема: когда я запускаю эту функцию в GHCI, она возвращает меня пустой список, но это не должно:
*Main> petla 2 2 [(1,1,1)]
[]
Но, когда я добавил return
до последней строки:
petla szerokosc wysokosc pozycje = do
let plansza_x = oznacz_pola_dookola_jako_miejsca_na_skarby_wiele
pozycje
(utworz_plansze pozycje szerokosc wysokosc)
szerokosc
let x = make_list $ zlicz_x plansza_x
guard ((sprawdz_kombinacje2 plansza_x pozycje (head x) szerokosc wysokosc) == True)
return x
и я скомпилировал его, и запустить эту функцию с теми же аргументами, как и прежде, GHCI возвращает меня:
*Main> petla 2 2 [(1,1,1)]
<interactive>:1:0:
Ambiguous type variable `m' in the constraint:
`Control.Monad.MonadPlus m'
arising from a use of `petla' at <interactive>:1:0-18
Probable fix: add a type signature that fixes these type variable(s)
Ваш код не запускается. Я попытаюсь исправить его, но имена переменных меня отключают. У вас гораздо больше шансов получить ответ, если ваши имена (1) короче и (2) на английском языке. –
Также проясните, что именно вы задаете, и определите функции, которые вы не указали для кода, которые не являются стандартными функциями. – Squazic
На данный момент я скажу, что я не думаю, что вы понимаете, что означает 'return' на функциональном языке, таком как Haskell. – Squazic