2016-04-01 3 views
3

私は楽しみのために書いているマリオのようなゲームのためにメインSFをコーディングすることに固執しました。 はここで解析しませんコードです:Yampaプログラム内の「入力 '< - '」の解析エラーを取得します

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 

注意その差はより顕著である。

原則として、小さな遅延で負帰還ループを作成して、変換されたゲームを渡して機能を切り替える必要がないようにしたいと考えています。私は中間の名前GS(ゲームの状態)とDGS(遅れたゲームの状態)を使用しようと最初のバージョンで

mainSF = parseInput >>> master_combine >>> draw 

:出力は、このようなSFを「描く」に行きます。エラーは、dgsで始まる行で通知されます。

私のために働く2番目のバージョンでは、私はSF全体を1行に書く必要がありました。

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

私は矢印の "do"表記でヘルプの検索を続けていますが、私はいつも正しいコードインデントを強調する同じ例を見つけます。しかし、私はSublimeでインデントして、スペーシングは私にはうまく見えます。別の方法がありますか?かっこ、中かっこ?何か?

+0

':

別のオプションは、あなたのタブが(あなたがタブを使用しておよそ一致しているしているので)であるかの長さは関係ありません、その場合には、rec後に改行(インデント)を置くことですrecgs < - ..'と 'dgs < - ..'は同じ列で開始しなければなりません。それは*インデント規則です - "ブロック"内のすべてが同じ列で始まります。また、ブロックの最初の構文要素によってインデントレベルを決定します。余談ですが、中括弧を使って字下げの問題を避けることができます。 'do \ n x \ n y'は' do {x; y} 'とする。 – user2407038

+0

@ user2407038:彼は 'gs'の定義で' dgs'を使いたいと思っています。つまり、 'rec'の中に定義する必要があります。 –

答えて

3

タブを使用していることがわかりました。私はあなたのタブが4スペースに設定されていると思いますか? Haskellのタブは常に8スペースに設定されています。 Sublimeのタブ設定を8つのスペースに変更するか、Sublimeを設定してタブをスペースに拡張すると動作します。

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

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 
+0

壮大な勝利!ありがとう。中括弧がrecコードブロックをサポートしているといいですね。表記の場合のように。私はわずかに異なる設定でいくつかの式を指定するためにインデントに頼らざるを得ないように、いくつかのマシン上でコードを作成しています。 –

関連する問題