Syntax Clojure尝试执行除以2的无效令牌

Syntax Clojure尝试执行除以2的无效令牌,syntax,while-loop,clojure,token,Syntax,While Loop,Clojure,Token,试着做这样的事情 let [N (read)] (def m 1) (while (< m*(m+1)/2 N) (do m=m+1) ) println m let[N(读取)] (def m 1) (而((定义f #_=>([n](f1 n)) #_=>([m n] #_=>(如果((重复(包括m)n) #_=>m))) #'用户/f 用户=>(f 5) 3. 用户=>(f 10) 4. 用户=>(f 20) 6. 在if表单的true部分,递归调用以(inc m)或

试着做这样的事情

let [N (read)]
(def m 1)
(while (< m*(m+1)/2 N)
       (do m=m+1)
)
println m
let[N(读取)]
(def m 1)
(而(

它不喜欢
/2
部分,并说它是无效的令牌。为什么?除此之外,您如何进行除法?

在Clojure中解决此问题的一个好方法是使用函数并使用递归(即递归)管理循环

e、 g

user=>(定义f
#_=>([n](f1 n))
#_=>([m n]
#_=>(如果(<(/(*m(inc m))2)n)
#_=>(重复(包括m)n)
#_=>m)))
#'用户/f
用户=>(f 5)
3.
用户=>(f 10)
4.
用户=>(f 20)
6.
在if表单的true部分,递归调用以
(inc m)
或m=m+1递归。如果不满足条件,则假部分产生当前值m

recur
有点特别,因为它看起来像是递归,似乎重新调用了当前的recur目标,但在引擎盖下它变成了一个循环

像Scheme这样的其他语言在不使用特殊形式的情况下执行此操作(尾部递归消除),您只需再次调用该函数

Clojure的显式方式的好处在于,如果您试图在无法应用尾部递归消除的情况下使用它,那么您将得到一个错误,并且不会出现运行时意外情况

还要注意的是,没有什么看起来像是作业。该函数只计算值并返回它,这在Clojure中很常见


欢迎来到Clojure

在Clojure中解决这个问题的一个好方法是使用函数,并使用递归(即递归)管理循环

e、 g

user=>(定义f
#_=>([n](f1 n))
#_=>([m n]
#_=>(如果(<(/(*m(inc m))2)n)
#_=>(重复(包括m)n)
#_=>m)))
#'用户/f
用户=>(f 5)
3.
用户=>(f 10)
4.
用户=>(f 20)
6.
在if表单的true部分,递归调用以
(inc m)
或m=m+1递归。如果不满足条件,则假部分产生当前值m

recur
有点特别,因为它看起来像是递归,似乎重新调用了当前的recur目标,但在引擎盖下它变成了一个循环

像Scheme这样的其他语言在不使用特殊形式的情况下执行此操作(尾部递归消除),您只需再次调用该函数

Clojure的显式方式的好处在于,如果您试图在无法应用尾部递归消除的情况下使用它,那么您将得到一个错误,并且不会出现运行时意外情况

还要注意的是,没有什么看起来像是作业。该函数只计算值并返回它,这在Clojure中很常见


欢迎来到Clojure

(/(*m(inc m))2是否正常工作?我把我的回复忘在家了也许是吧?显然它也不喜欢下一行,所以我不能告诉你让我们从
(m+1)
位开始。它编译吗?另外,什么是
N
?N是从stdin读取的数字,
let[N(read)]
它将
m*
m+1
作为符号读取。我认为它会像对待
m*(m+1)
一样对待
m*(m+1)
。i、 e.
的两个独立参数(/(*m(inc m))2是否有效?我把我的回复忘在家了也许是吧?显然它也不喜欢下一行,所以我不能告诉你让我们从
(m+1)
位开始。它编译吗?另外,什么是
N
?N是从stdin读取的数字,
let[N(read)]
它将
m*
m+1
作为符号读取。我认为它会像对待
m*(m+1)
一样对待
m*(m+1)
。i、 e.
的两个独立参数作为旁白,在所有括号都浮动的情况下,如何理解事物的位置?也许我对它还不熟悉,但它很难读懂!缩进告诉你很多,它和花括号语言并没有太大的区别,尽管它需要一些时间来适应。顺便问一下,当括号都在浮动时,你如何理解事物的位置?也许我对它还不熟悉,但它很难读懂!缩进告诉你很多,它和花括号语言并没有太大区别,尽管它需要一些时间来适应。
user=> (defn f
  #_=>   ([n] (f 1 n))
  #_=>   ([m n]
  #_=>    (if (< (/ (* m (inc m)) 2) n)
  #_=>        (recur (inc m) n)
  #_=>      m)))
#'user/f
user=> (f 5)
3
user=> (f 10)
4
user=> (f 20)
6