If statement 结合;如果让;加上;或;因此,函数可以在一个值上执行多次
我试图实现的是,当满足几个条件时,对一个值执行几次函数。特别是我们有两个变量a和b 当a为true时,值由与a关联的函数转换,然后 当b为true时,新值由与b关联的函数转换 因此,当初始值为0,函数为If statement 结合;如果让;加上;或;因此,函数可以在一个值上执行多次,if-statement,clojure,let,If Statement,Clojure,Let,我试图实现的是,当满足几个条件时,对一个值执行几次函数。特别是我们有两个变量a和b 当a为true时,值由与a关联的函数转换,然后 当b为true时,新值由与b关联的函数转换 因此,当初始值为0,函数为inc和#(+5%)时,我们可以得到0、1、5或6 我的方法如下,但没有成功 user> (def initial-number 0) user> (if-let [a true b true] (cond-> initial-number a inc b (#(+ 5 %)))
inc
和#(+5%)
时,我们可以得到0、1、5或6
我的方法如下,但没有成功
user> (def initial-number 0)
user> (if-let [a true b true] (cond-> initial-number a inc b (#(+ 5 %))))
IllegalArgumentException clojure.core/if-let requires exactly 2 forms in binding vector in user: clojure.core/if-let (core.clj:1758)
user>
如果将
if let
替换为let
,则您拥有的代码将按说明工作。所有条件逻辑都存在于cond->
中
(def initial-number 0)
(let [a true b true] (cond-> initial-number a inc b (#(+ 5 %)))) => 6
(let [a false b true] (cond-> initial-number a inc b (#(+ 5 %)))) => 5
(let [a true b false] (cond-> initial-number a inc b (#(+ 5 %)))) => 1
(let [a false b false] (cond-> initial-number a inc b (#(+ 5 %)))) => 0
如果将
if let
替换为let
,则您拥有的代码将按说明工作。所有条件逻辑都存在于cond->
中
(def initial-number 0)
(let [a true b true] (cond-> initial-number a inc b (#(+ 5 %)))) => 6
(let [a false b true] (cond-> initial-number a inc b (#(+ 5 %)))) => 5
(let [a true b false] (cond-> initial-number a inc b (#(+ 5 %)))) => 1
(let [a false b false] (cond-> initial-number a inc b (#(+ 5 %)))) => 0