3

楽しみのために書いているマリオのようなゲームのメイン SF のコーディングに行き詰まりました。解析しないコードは次のとおりです。

master_combine = proc pi -> do 
                            -- rec cgg <- player_update >>> (initial_game --> bounds_updater) >>> iPre initial_game -< (pi, cgg)
                            rec gs  <- player_update >>> (initial_game --> bounds_updater) -< (pi, dgs)
                                dgs <- iPre initial_game -< gs
                            returnA -< gs

そして、これはOKを解析して実行するコードです:

master_combine = proc pi -> do 
                            rec cgg <- player_update >>> (initial_game --> bounds_updater) >>> iPre initial_game -< (pi, cgg)
                            -- rec gs  <- player_update >>> (initial_game --> bounds_updater) -< (pi, dgs)
                            --  dgs <- iPre initial_game -< gs
                            returnA -< cgg

違いをわかりやすくするために、両方のバージョンをコメント付きの同じコード ブロックに保存したことに注意してください。

原則として、変換されたゲームを渡すことができ、機能を切り替える必要がないように、わずかな遅延で負のフィードバック ループを作成したいと考えています。出力は、次のような「描画」SF に送られます。

mainSF = parseInput >>> master_combine >>> draw

最初のバージョンでは、中間名 gs (ゲーム状態) と dgs (遅延ゲーム状態) を使用しようとしました。エラーは、dgs で始まる行で通知されます。

2 番目のバージョンでは、SF 全体を 1 行で書かなければなりませんでした。

負のフィードバック ループを意味する追加の SF を接続して機能を拡張する必要があるため、コードの最初のバージョンを使用したいと思います。

私は rec の矢印 "do" 表記のヘルプを探し続けていますが、適切なコードのインデントを強調する同じ例を常に見つけています。しかし、私はSublimeでインデントし、間隔は私にはうまく見えます. 別の方法はありますか?括弧、中括弧?なんでも?

4

1 に答える 1

3

タブを使用していることに気付きました。タブが 4 つのスペースに設定されていると思いますか? Haskell のタブは常に 8 つのスペースに設定されています。Sublime のタブ設定を 8 つのスペースに変更するか、タブをスペースに拡張するように Sublime を設定すると、動作するはずです。

dgs(明らかに、前にタブを 4 つのスペースに変更する必要があります)。

別のオプションは、 の後に改行 (およびインデント) を配置するrecことです。この場合、タブの長さは問題になりません (タブの使用について一貫しているため)。

master_combine = proc pi -> do 
                            -- rec cgg <- player_update >>> (initial_game --> bounds_updater) >>> iPre initial_game -< (pi, cgg)
                            rec
                                gs  <- player_update >>> (initial_game --> bounds_updater) -< (pi, dgs)
                                dgs <- iPre initial_game -< gs
                            returnA -< gs
于 2016-04-01T20:28:39.290 に答える