2012-02-11 14 views
0
answerFalse::Int->IO() 
answerFalse hp=do 
      hp-- 
      if hp<=0 then 
       putStrLn"================Game Over================" 

      else 
       print(hp) 

私は「hp--」を入れたときに、私は「--hpを置く場合、私はすでに値が3 とintとして馬力を宣言し、今私の問題は、それがエラーHaskellの減算エラー

Couldn't match expected type `IO a0' with actual type `Int' 

しかしを示しています"、結果のプリントは2ではありません。

私はまた、システムがそこに止まっているようにしました。

+3

ハスケルはCではありません。単純に変数の値を変更することはできません! – Thomas

+4

ハスケルは関数型言語であり、必須ではありませんので、 - や++のようなものは動作しません。 – mrlee

+0

説明のためにありがとう。 – user1151874

答えて

6

Haskellで変数を変更することはできません。 hp++++hp(またはhp----hp)は、Haskellではまったく動作しません。 --hpがコンパイルされる理由は、がhpの部分をコメントするコメントを作成するという理由があります。

は何をしようとしていることはこれです:

answerFalse hp = 
    if hp - 1 <= 0 
    then putStrLn "================Game Over================" 
    else print hp 

ます。また、新しい変数作成することによって、このようにそれを行うことができます:あなたがして、基本的なHaskellの知識を確認する必要があり

answerFalse hp = do 
    let newHp = hp - 1 
    if newHp <= 0 
    then putStrLn "================Game Over================" 
    else print hp 

を初心者のチュートリアルを読む。 This questionは優れたリソースを提供します。

+0

リンクと説明のおかげで、これは初めての関数型言語の学習です。再度、感謝します! – user1151874

+0

'hp - 'の後ろにコメント*が導入されています。 'do'文脈では、' hp'は 'IO a0'型を持つことが期待されます。ここで' a0'は値が束縛されていないので問題ではない任意の型です。しかし、 'hp'は' Int'を持ち、 'IOa'と' Int'をマッチさせることができないというエラーにつながります。 – pat

0

i ++のようなものは、State Monadを使ってHaskellでモデル化できます。あなたは例を見ることができますhaskellwiki