Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对clojure.core/defn的调用不符合规范_Clojure - Fatal编程技术网

对clojure.core/defn的调用不符合规范

对clojure.core/defn的调用不符合规范,clojure,Clojure,我正在用Clojure写一个小游戏。我对这门语言非常陌生,我首先遇到的错误之一是 对clojure.core/defn的调用不符合规范。 我不知道是什么原因导致了错误,但会引发以下异常: (ns survival-text.core (:gen-class)) (def health 10) (def hunger 10) (def locations ["plains" "ocean" "mountains" "forest"]) (def currentLocation (atom

我正在用Clojure写一个小游戏。我对这门语言非常陌生,我首先遇到的错误之一是

对clojure.core/defn的调用不符合规范。

我不知道是什么原因导致了错误,但会引发以下异常:

  (ns survival-text.core
  (:gen-class))

(def health 10)
(def hunger 10)
(def locations ["plains" "ocean" "mountains" "forest"])
(def currentLocation (atom 0))

(defn walk
  (def random rand-int (count locations))
  (reset! currentLocation (atom random)))

(defn choices
  [input]
  (case (input)
    "walk" (walk)
    "exit" (System/exit 0)
    ""))

(defn -main
  [& args]
  (while true
    (def input read-line)
    (choices input)))
但不是这个:

  (ns survival-text.core
  (:gen-class))

(def health 10)
(def hunger 10)
(def locations ["plains" "ocean" "mountains" "forest"])
(def currentLocation (atom 0))

(defn choices
  [input]
  (case (input)
    "walk" (reset! currentLocation (atom (rand-nth locations)))
    "exit" (System/exit 0)
    ""))

(defn -main
  [& args]
  (while true
    (def input read-line)
    (choices input)))
这就是向我扔的东西

Exception in thread "main" Syntax error macroexpanding clojure.core/defn at (survival_text/core.clj:9:1).
Call to clojure.core/defn did not conform to spec.
        at clojure.lang.Compiler.checkSpecs(Compiler.java:6971)
        at clojure.lang.Compiler.macroexpand1(Compiler.java:6987)
        at clojure.lang.Compiler.macroexpand(Compiler.java:7074)
        at clojure.lang.Compiler.eval(Compiler.java:7160)
        at clojure.lang.Compiler.load(Compiler.java:7635)
        at clojure.lang.RT.loadResourceScript(RT.java:381)
        at clojure.lang.RT.loadResourceScript(RT.java:372)
        at clojure.lang.RT.load(RT.java:463)
        at clojure.lang.RT.load(RT.java:428)
        at clojure.core$load$fn__6824.invoke(core.clj:6126)
        at clojure.core$load.invokeStatic(core.clj:6125)
        at clojure.core$load.doInvoke(core.clj:6109)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invokeStatic(core.clj:5908)
        at clojure.core$load_one.invoke(core.clj:5903)
        at clojure.core$load_lib$fn__6765.invoke(core.clj:5948)
        at clojure.core$load_lib.invokeStatic(core.clj:5947)
        at clojure.core$load_lib.doInvoke(core.clj:5928)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invokeStatic(core.clj:667)
        at clojure.core$load_libs.invokeStatic(core.clj:5985)
        at clojure.core$load_libs.doInvoke(core.clj:5969)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invokeStatic(core.clj:667)
        at clojure.core$require.invokeStatic(core.clj:6007)
        at clojure.core$require.doInvoke(core.clj:6007)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at user$eval140$fn__144.invoke(form-init1707647033589713549.clj:1)
        at user$eval140.invokeStatic(form-init1707647033589713549.clj:1)
        at user$eval140.invoke(form-init1707647033589713549.clj:1)
        at clojure.lang.Compiler.eval(Compiler.java:7176)
        at clojure.lang.Compiler.eval(Compiler.java:7166)
        at clojure.lang.Compiler.load(Compiler.java:7635)
        at clojure.lang.Compiler.loadFile(Compiler.java:7573)
        at clojure.main$load_script.invokeStatic(main.clj:452)
        at clojure.main$init_opt.invokeStatic(main.clj:454)
        at clojure.main$init_opt.invoke(main.clj:454)
        at clojure.main$initialize.invokeStatic(main.clj:485)
        at clojure.main$null_opt.invokeStatic(main.clj:519)
        at clojure.main$null_opt.invoke(main.clj:516)
        at clojure.main$main.invokeStatic(main.clj:598)
        at clojure.main$main.doInvoke(main.clj:561)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.lang.Var.applyTo(Var.java:705)
        at clojure.main.main(main.java:37)
Caused by: clojure.lang.ExceptionInfo: Call to clojure.core/defn did not conform to spec. {:clojure.spec.alpha/problems ({:path [:fn-tail :arity-1 :params], :pred clojure.core/vector?, :val (def random rand-int (count locations)), :via [:clojure.core.specs.alpha/defn-args :clojure.core.specs.alpha/params+body :clojure.core.specs.alpha/param-list :clojure.core.specs.alpha/param-list], :in [1]} {:path [:fn-tail :arity-n :bodies :params], :pred clojure.core/vector?, :val def, :via [:clojure.core.specs.alpha/defn-args :clojure.core.specs.alpha/params+body :clojure.core.specs.alpha/params+body :clojure.core.specs.alpha/params+body :clojure.core.specs.alpha/param-list :clojure.core.specs.alpha/param-list], :in [1 0]}), :clojure.spec.alpha/spec #object[clojure.spec.alpha$regex_spec_impl$reify__2509 0x41e68d87 "clojure.spec.alpha$regex_spec_impl$reify__2509@41e68d87"], :clojure.spec.alpha/value (walk (def random rand-int (count locations)) (reset! currentLocation (atom random))), :clojure.spec.alpha/args (walk (def random rand-int (count locations)) (reset! currentLocation (atom random)))}
        at clojure.spec.alpha$macroexpand_check.invokeStatic(alpha.clj:705)
        at clojure.spec.alpha$macroexpand_check.invoke(alpha.clj:697)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.lang.Var.applyTo(Var.java:705)
        at clojure.lang.Compiler.checkSpecs(Compiler.java:6969)
        ... 44 more
我正在使用leiningen,除了src/survival text/core.clj之外,我没有改变任何东西


是什么原因导致此错误以及如何修复它?

您忘记了args列表。它应该是这样的:

(defn walk
  []  ; no args to this function
  (let [random (rand-int (count locations))]
    (reset! currentLocation random)))

你可能还想复习Clojure的介绍材料,比如介绍或。特别是,在函数内部使用
(def…
)通常不是一个好主意。

似乎
walk
函数缺少参数?请注意,我们的规则要求问题中给出的代码是一个——产生特定问题的尽可能短的代码。把东西拿出来,直到你发现问题是由
walk
引起的,因此只发布
walk
而不发布代码的其他部分,是你准备提问时需要做的一部分。除了上面的帮助中心链接,请参阅,特别包括“修剪技巧”部分。它很有效!谢谢你提供的额外资料,我也会研究一下,忘记了兰德周围的括号-int@AlanThompson,…您是否会反驳该决议将问题归入“简单印刷错误”类别/结束原因的说法?这是一个不理解
defn
表达式中的args向量的简单错误。但是,调用clojure.core/defn时出现的错误msg
不符合规范。
对帮助新用户确定需要采取什么纠正措施没有多大帮助。