我对 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)