如何在此代码中应用map?(Clojure)
我开始学习Clojure,需要任务方面的帮助 我必须编写这个函数:如何在此代码中应用map?(Clojure),clojure,Clojure,我开始学习Clojure,需要任务方面的帮助 我必须编写这个函数: (data-table student-tbl) ;; => ({:surname "Ivanov", :year "1996", :id "1"} ;; {:surname "Petrov", :year "1996", :id "2"} ;; {:surname "Sidorov", :year "1997", :id "3"}) 我必须使用let、map、next、table键和数据记录函数。 在这
(data-table student-tbl)
;; => ({:surname "Ivanov", :year "1996", :id "1"}
;; {:surname "Petrov", :year "1996", :id "2"}
;; {:surname "Sidorov", :year "1997", :id "3"})
我必须使用let、map、next、table键和数据记录函数。
在这种情况下:
student-tbl => (["id" "surname" "year" "group_id"] ["1" "Ivanov" "1998"] ["2" "Petrov" "1997"] ["3" "Sidorov" "1996"])
(table-keys student-tbl) => [:id :surname :year :group_id]
(data-record [:id :surname :year :group_id] ["1" "Ivanov" "1996"]) => {:surname "Ivanov", :year "1996", :id "1"}
我写道:
(defn data-table [tbl]
(let [[x] (next tbl)]
(data-record (table-keys tbl) x)
))
(data-table student-tbl) => {:surname "Ivanov", :year "1998", :id "1"}
如何使用map获得正确的结果?首先,这里是您在实践中可能应该如何编写这篇文章。然后我会告诉你你的错误,这样你就可以为你的家庭作业学习了 单向:
(defn data-table
[[headers & data]]
(let [headers (map keyword headers)
data-record (partial zipmap headers)]
(map data-record data)))
这里的要点是:
- 分解输入以继续,并将标题与数据分开
- 使用核心
函数构建一次标题关键字
- 编写一个始终使用相同的标题集的函数,然后将该函数映射到数据上
- 请注意,没有外部函数,当我们可以摆脱它时,这总是一件好事
数据记录
函数映射到x上。首先,let
绑定应该将(下一个tbl)
绑定到x
,而不是[x]
(按照您的方式,您只获得数据集的第一个元素(Ivanov,1998,1)
在本例中,忽略let中的数据记录zipmap
和表键
绑定。它们可以使本例正常工作,您可以安全地删除它们
(defn data-table-newb
[tbl]
(let [table-keys #(map keyword (first %))
headers (table-keys tbl)
data-record zipmap
x (next tbl)]
(map #(data-record headers %) x)))
基本上,您在开始时计算表头,然后创建一个新的匿名函数,该函数调用数据记录
,并为其提供您的计算头和单独的数据向量。您将该函数应用于数据列表中绑定到x
的每个元素
删除其他地方定义的不必要函数,您将获得:
(defn data-table-newb
[tbl]
(let [headers (table-keys tbl)
x (next tbl)]
(map #(data-record headers %) x)))
谢谢,乔希。我理解我的错误。