Syntax 莱宁安clojure的主课(康威的《生活游戏》)

Syntax 莱宁安clojure的主课(康威的《生活游戏》),syntax,clojure,conways-game-of-life,Syntax,Clojure,Conways Game Of Life,嗨,伙计们!我正在运行康威的《生活游戏》——但我想我必须在这里修改原始版本:在project.clj文件中引用field.clj(而不是run.clj)。完成后,我可以通过跑步开始游戏 repl> (run-game) 但是,它在该方法上崩溃,该方法没有关于输入参数的注释 因此,我的问题是:从Clojure语法的角度来看,这种形式(看起来)做了什么 (defn run-game ([engine seed] (run-game engine seed {:colu

嗨,伙计们!我正在运行康威的《生活游戏》——但我想我必须在这里修改原始版本:在
project.clj
文件中引用
field.clj
(而不是
run.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))))
更新

  • 为什么“[引擎种子]”嵌套在括号中

  • 为什么这个函数是递归的

  • 关于这个函数是如何设计的,还有其他语法层次的见解吗


我不能100%确定你在问什么,但它基本上定义了一个函数,它要么接受
引擎
种子
参数,要么接受
引擎
种子
选项
参数

如果未指定
选项
参数,则函数将创建一个默认映射{:columns 50:rows 50:speed 500:cellsize 10},并调用第二个表单

您必须查看代码以确定应将
引擎
种子
设置为什么

然后,您可以将其称为:

(run-game engine seed)


这有帮助吗?

我不能100%确定你在问什么,但它基本上定义了一个函数,它要么接受
引擎
种子
参数,要么接受
引擎
种子
选项
参数

如果未指定
选项
参数,则函数将创建一个默认映射{:columns 50:rows 50:speed 500:cellsize 10},并调用第二个表单

您必须查看代码以确定应将
引擎
种子
设置为什么

然后,您可以将其称为:

(run-game engine seed)


这有帮助吗?

我不确定这些参数是如何使用的——所以这没有多大帮助(我知道该程序需要2个参数……但在解释run game函数的语法时遇到困难……寻找函数如何工作及其如何委派参数的细节。还想知道为什么没有前导[]s在defn函数名之后。Upvote用于澄清我的问题不够精确。我不确定这些参数是如何使用的,所以这没有多大帮助…:(我知道该程序需要2个参数……但在解释run game函数的语法时遇到困难……寻找函数如何工作及其如何委派参数的细节。还想知道为什么没有前导[]在defn函数名后的s。Upvote用于澄清我的问题不够精确。啊哈-现在我明白了-这是一个多态函数…因此,根据我放入的参数数量,会触发不同的函数实现。我没有意识到可以使用此语法以多态方式定义多个函数。我不这么认为nk这与多态性通常是如何定义的有关。它只是一个带有可选参数的函数。啊哈-现在我明白了-这是一个多态函数…因此,根据我放入的参数的数量,会触发不同的函数实现。我没有意识到可以使用此语法以多态方式定义多个函数x、 我认为这与多态性通常的定义无关,它只是一个带有可选参数的函数。