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)