Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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)_Clojure_Clojure Core.logic - Fatal编程技术网

函数不返回(Clojure)

函数不返回(Clojure),clojure,clojure-core.logic,Clojure,Clojure Core.logic,我是clojure的新手,我的功能是elligble选民不返回向量,我错在哪里 (def human-db [ {:name "Kanishk" :age 28 :sex "male"} {:name "Kanishk1" :age 29 :sex "male"} {:name "Kanishk2" :age 0 :sex "female"} {:name "Kanishk3" :age 1 :sex "male"} {:name "Kanishk4" :age

我是clojure的新手,我的功能是elligble选民不返回向量,我错在哪里

(def human-db
  [
   {:name "Kanishk" :age 28 :sex "male"}
   {:name "Kanishk1" :age 29 :sex "male"}
   {:name "Kanishk2" :age 0 :sex "female"}
   {:name "Kanishk3" :age 1 :sex "male"}
   {:name "Kanishk4" :age 3 :sex "female"}
   {:name "Kanishk5" :age 3 :sex "male"}
   {:name "Kanishk6" :age 3 :sex "female"}
   {:name "Kanishk7" :age 3 :sex "male"}
   {:name "Kanishk8" :age 3 :sex "female"}])


(defn elligble-voters
  [human-db]
  (reduce (fn
            [new-map map]
            (if (> (:age map) 18)
              (conj new-map map)))  [] human-db))
(elligble-voters human-db)

问题在于您的
if
表达式-没有else子句,因此当投票人年龄小于18岁时,它返回nil

human db
中的最后一项年龄为3岁,因此
if
返回
nil
,从而减少返回
nil

这项工作:

(定义elligble选民[人类数据库]
(减少(fn[新地图]
(如果(>(:年龄图)18)
(联合新地图)

新映射);;问题在于您的
if
表达式-没有else子句,因此当投票人年龄小于18岁时,它返回nil

human db
中的最后一项年龄为3岁,因此
if
返回
nil
,从而减少返回
nil

这项工作:

(定义elligble选民[人类数据库]
(减少(fn[新地图]
(如果(>(:年龄图)18)
(联合新地图)

新地图);;当
减少时
如果能够做你想做的事情,请使用更适合过滤集合的东西

i、 e.
过滤器

clojure.core/filter ([pred][pred coll])

返回coll中的项的惰性序列,该序列 (pred项)返回逻辑true。pred必须没有副作用。 未提供采集时返回传感器


#(>(:age%)18)
是匿名函数的缩写,相当于

(fn [x] 
  (> (:age x) 18))

reduce
如果能够做你想做的事情,可以使用更适合过滤集合的东西

i、 e.
过滤器

clojure.core/filter ([pred][pred coll])

返回coll中的项的惰性序列,该序列 (pred项)返回逻辑true。pred必须没有副作用。 未提供采集时返回传感器


#(>(:age%)18)
是匿名函数的缩写,相当于

(fn [x] 
  (> (:age x) 18))

你能澄清一下你想要实现什么吗?你没有第二个分支的
if
:如果年龄小于或等于18岁,它只返回nil。你需要返回累加器(
newmap
),而不是:
(if…(conj…)newmap)
你能澄清一下你想要实现什么吗?如果
没有第二个分支:如果年龄小于或等于18岁,它只返回零。你需要返回累加器(
新映射
):
(如果…(conj…)新映射)
(fn [x] 
  (> (:age x) 18))