Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
If statement 结合;如果让;加上;或;因此,函数可以在一个值上执行多次_If Statement_Clojure_Let - Fatal编程技术网

If statement 结合;如果让;加上;或;因此,函数可以在一个值上执行多次

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 %)))

我试图实现的是,当满足几个条件时,对一个值执行几次函数。特别是我们有两个变量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 %))))
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