Основной класс в clojure, leiningan (игра жизни Конвея) - PullRequest
1 голос
/ 11 марта 2012

Привет, ребята! Я играю в игру жизни Конвея, но я думаю, что мне пришлось изменить оригинальную версию здесь: https://github.com/sebastianbenz/clojure-game-of-life, чтобы ссылаться на field.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))))

ОБНОВЛЕНИЕ _

  • Почему «[двигатель-семя]» вложено в скобки?

  • Почему эта функция рекурсивная?

  • какие-либо другие сведения об уровне синтаксиса о том, как эта функция разработана?

1 Ответ

4 голосов
/ 11 марта 2012

Я не на 100% уверен в том, что вы спрашиваете, но в основном он определяет функцию, которая принимает аргументы engine и seed или engine, seed и options аргументы.

Если аргумент option не указан, функция создает карту по умолчанию {:columns 50 :rows 50 :speed 500 :cellsize 10} и вызывает вторую форму.

Вам нужно будет посмотреть код, чтобы определить, чтоengine и seed должны быть установлены на.

Тогда вы можете назвать его как:

(run-game engine seed)

или

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

Помогает ли это?

...