-1

私はHaskellでBrainf*ckインタープリターを書いています。

(chr (fromEnum $ getMem state))Word8をCharに変換しただけの印刷を試みています。次に、特定の場合に印刷した後、新しい状態に戻したいと思います。

    '.' -> do hPutChar stdout (chr (fromEnum $ getMem state))
            hFlush stdout
            return state { prog_pointer = prog_pointer state}

このエラーメッセージが表示されます

The function `hPutChar' is applied to six arguments,
but its type `Handle -> Char -> IO ()' has only two

In a stmt of a 'do' block:
  hPutChar
    stdout
    (chr (fromEnum $ getMem state))
    hFlush
    stdout
    return
    (state {prog_pointer = prog_pointer state})

このコードで

iterateBF :: BFState -> IO BFState
iterateBF state = case (program state !! prog_pointer state) of
    --some more cases here--
    '.' -> do hPutChar stdout (chr (fromEnum $ getMem state))
            hFlush stdout
            return state { prog_pointer = prog_pointer state}

なぜこのエラーが発生するのか理解できないようです。

leftaroundaboutとsabaumaのコメントの後、コードを次のように編集しました

iterateBF :: BFState -> IO BFState
iterateBF state = case (program state !! prog_pointer state) of
    --some more cases here--
    '.' -> do hPutChar stdout (chr (fromEnum $ getMem state))
           hFlush stdout
           return state { prog_pointer = prog_pointer state}

今回はスペースのみを使用します。

しかし、私はparse error on input 'hFlush'

誰もが理由を知っていますか?

4

1 に答える 1

2

leftaroundaboutのコメントに基づいて、

'.' -> do hPutChar stdout (chr (fromEnum $ getMem state))
          hFlush stdout
          return state { prog_pointer = prog_pointer state}

doの後のすべての行が、ではなく、互いに整列していることに注意してくださいdo

于 2012-12-01T21:36:06.750 に答える