函数不返回(Clojure)
我是clojure的新手,我的功能是elligble选民不返回向量,我错在哪里函数不返回(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
(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))