Exercism Clojure 练习
Exercism Clojure exercise
我正在通过 Exercism 学习 clojure,但在完成千层面问题的最后一部分时遇到了一些困难。
这里是指令 - 定义带有两个参数的总时间函数:第一个参数是你添加到千层面的层数,第二个参数是千层面在烤箱中的分钟数.该函数应该 return 您总共烹饪了多少分钟的烤宽面条,这是准备时间(以分钟为单位)和烤宽面条目前在烤箱中花费的时间(以分钟为单位)的总和。
这是给我带来麻烦的代码:
(defn prep-time [num-layers]
(* times-two num-layers))
(def sum (prep-time times-two))
(defn total-time [num-layers actual-time]
(def test1 (prep-time num-layers))
(+ test1 actual-time))
(def finished (total-time test1 prep-time))
我收到一条错误消息:
`(defn prep-time [num-layers]
11: (* times-two num-layers))
^--sci.impl.fns$fun$arity_1__1213 cannot be cast to java.lang.Number`
为什么我会收到这个错误,它意味着什么?
不要在 defn
中使用 def
。如果你真的需要一些变量,你可以使用let
,但是没有它也可以完成这个练习:
(ns lucians-luscious-lasagna)
(def expected-time 40)
(defn remaining-time [actual-time]
(- expected-time actual-time))
(defn prep-time [num-layers]
(* num-layers 2))
(defn total-time [num-layers actual-time]
(+ (prep-time num-layers) actual-time))
要回答有关转换错误的具体问题,这是因为 times-two
是一个函数,但您将其传递给 *
,后者期望其参数为数字。
您没有指定如何定义 times-two
,但我怀疑您的意思是该行是 (times-two num-layers)
— 或者只是 (* 2 num-layers)
.
但是,与 一样,在 defn
中使用 def
几乎可以肯定是对 def
的误用——请改用 let
。您不需要 test1
成为全局变量 — 将 test1
传递给 total-time
没有任何意义,因为 total-time
是 test1
的定义位置!事实上,通过将 test1
传递给 total-time
,您将有效地将其重新定义为原始值的两倍。
我还建议您重新检查 'actual-time' 参数的名称选择。我不清楚“实际”时间是什么意思。这不是到目前为止在烤箱中花费的时间吗?也许 oven-time
是一个不那么模糊的名字。
我正在通过 Exercism 学习 clojure,但在完成千层面问题的最后一部分时遇到了一些困难。
这里是指令 - 定义带有两个参数的总时间函数:第一个参数是你添加到千层面的层数,第二个参数是千层面在烤箱中的分钟数.该函数应该 return 您总共烹饪了多少分钟的烤宽面条,这是准备时间(以分钟为单位)和烤宽面条目前在烤箱中花费的时间(以分钟为单位)的总和。
这是给我带来麻烦的代码:
(defn prep-time [num-layers]
(* times-two num-layers))
(def sum (prep-time times-two))
(defn total-time [num-layers actual-time]
(def test1 (prep-time num-layers))
(+ test1 actual-time))
(def finished (total-time test1 prep-time))
我收到一条错误消息:
`(defn prep-time [num-layers]
11: (* times-two num-layers))
^--sci.impl.fns$fun$arity_1__1213 cannot be cast to java.lang.Number`
为什么我会收到这个错误,它意味着什么?
不要在 defn
中使用 def
。如果你真的需要一些变量,你可以使用let
,但是没有它也可以完成这个练习:
(ns lucians-luscious-lasagna)
(def expected-time 40)
(defn remaining-time [actual-time]
(- expected-time actual-time))
(defn prep-time [num-layers]
(* num-layers 2))
(defn total-time [num-layers actual-time]
(+ (prep-time num-layers) actual-time))
要回答有关转换错误的具体问题,这是因为 times-two
是一个函数,但您将其传递给 *
,后者期望其参数为数字。
您没有指定如何定义 times-two
,但我怀疑您的意思是该行是 (times-two num-layers)
— 或者只是 (* 2 num-layers)
.
但是,与 defn
中使用 def
几乎可以肯定是对 def
的误用——请改用 let
。您不需要 test1
成为全局变量 — 将 test1
传递给 total-time
没有任何意义,因为 total-time
是 test1
的定义位置!事实上,通过将 test1
传递给 total-time
,您将有效地将其重新定义为原始值的两倍。
我还建议您重新检查 'actual-time' 参数的名称选择。我不清楚“实际”时间是什么意思。这不是到目前为止在烤箱中花费的时间吗?也许 oven-time
是一个不那么模糊的名字。