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
如何在此代码中应用map?(Clojure)_Clojure - Fatal编程技术网

如何在此代码中应用map?(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键和数据记录函数。 在这

我开始学习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键和数据记录函数。 在这种情况下:

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

谢谢,乔希。我理解我的错误。