1

こんにちは、みんな!私はコンウェイの人生ゲームを実行していますが、元のバージョンをここで変更する必要があったと思います: https://github.com/sebastianbenz/clojure-game-of-lifefield.cljファイルで(ではなくrun.clj)を参照するようにしproject.cljます。その後、実行してゲームを開始できます

repl> (run-game)

ただし、入力引数に関するコメントがないこのメソッドではクラッシュします。

したがって、私の質問は次のとおりです。Clojure 構文の観点から、このフォーム (実行するように見える) は何ですか?

(defn run-game
  ([engine seed]
    (run-game engine seed
      {:columns 50 :rows 50 :speed 500 :cellsize 10}))
  ([engine seed options]
    (let [panel (field-panel engine seed options)
          frame (field-frame panel)
          timer (Timer. (options :speed) panel)]
      (.start timer))))

更新_

  • 「[engine-seed]」が括弧でネストされているのはなぜですか?

  • なぜこの関数は再帰的ですか?

  • この関数がどのように設計されているかについて、他の構文レベルの洞察はありますか?

4

1 に答える 1

4

あなたが何を求めているのかは100%わかりませんが、基本的にはengineandseed引数またはengine, seedandoptions引数を取る関数を定義しています。

引数が指定されていない場合option、関数は既定のマップを作成し{:columns 50 :rows 50 :speed 500 :cellsize 10}、2 番目の形式を呼び出します。

コードを調べて、 と を何engineseed設定する必要があるかを判断する必要があります。

次に、次のように呼び出すことができます。

(run-game engine seed)

また

(run-game engine seed {:columns 75 :rows 75 :speed 750 :cellsize 15})

それは役に立ちますか?

于 2012-03-11T18:28:38.580 に答える