Основной класс в clojure, leiningan (игра жизни Конвея)

Привет, ребята! Я запускаю игру Конвея о жизни, но, думаю, мне пришлось изменить исходную версию здесь: 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))))

ОБНОВЛЕНИЕ _

  • Почему «[engine-seed]» заключено в круглые скобки?

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

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


person jayunit100    schedule 11.03.2012    source источник
comment
Ага, теперь я вижу --- это полиморфная функция... Итак, в зависимости от того, сколько аргументов я помещаю, запускается другая функциональная реализация. Я не знал, что с помощью этого синтаксиса можно полиморфно определить несколько функций.   -  person jayunit100    schedule 12.03.2012
comment
Я не думаю, что это связано с тем, как обычно определяется полиморфизм. Это просто функция с необязательным аргументом.   -  person amalloy    schedule 12.03.2012


Ответы (1)


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

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

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

Затем вы можете назвать это как:

(run-game engine seed)

or

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

Это помогает?

person Adrian Mouat    schedule 11.03.2012
comment
Я не уверен, как используются эти аргументы --- так что это не очень помогает... :( Я понимаю, что программа принимает 2 аргумента.... Но у меня проблемы с интерпретацией синтаксиса функции запуска игры. делаю... Ищу подробности о том, как работает функция и как она делегирует аргументы.Также интересно, почему нет начальных [] после имени функции defn. - person jayunit100; 11.03.2012
comment
Проголосуйте за разъяснение того, что мой вопрос был недостаточно точным. - person jayunit100; 11.03.2012