2016-12-16 5 views
-1

私はClojureを学び始め、仕事の助けが必要です。このコードでどのようにマップを適用できますか? (Clojure)

私は、この関数を記述する必要があります。

(data-table student-tbl) 
;; => ({:surname "Ivanov", :year "1996", :id "1"} 
;;  {:surname "Petrov", :year "1996", :id "2"} 
;;  {:surname "Sidorov", :year "1997", :id "3"}) 

私は聞かせて、マップ、次回、テーブルのキーとデータの記録機能を使用する必要があります。この場合、 :

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"} 

答えて

1

まず、これを実際にどのように書くべきかを説明します。それから、あなたの間違いを見せて、宿題を学ぶことができます。

一つの方法:

(defn data-table 
    [[headers & data]] 
    (let [headers (map keyword headers) 
     data-record (partial zipmap headers)] 
    (map data-record data))) 

ここで重要なポイントは以下のとおりです。入力destructure

  • は先に行くし、データ
  • とは別のヘッダは、コアkeyword機能を使って、一度ヘッダを構築
  • は、常に同じヘッダーセットを使用し、その関数をデータにマップする関数を作成します。
  • 私たちはあなたの方法を動作させるために、それ今

で逃げることができたときには常に素晴らしい事である外部関数が存在しないことを

  • ノート、何をする必要がX上data-record機能をマップです。まず、結合letは、(ない[x]xにあなたがそれをやっている方法を(next tbl)をバインドする必要がありますあなただけのデータセット(イワノフ、1998年、この例では1)。

    の最初の要素を取得し、無視しますdata-record zipmapとletに結合table-keys。彼らは、この例を動作させるためにそこにいる、とあなたが安全に削除することができます。

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

    基本的に、あなたはその新しい匿名関数を作成し、最初にあなたのテーブルヘッダを計算しますdata-recordを呼び出し、計算したヘッダーと個々のデータベクトルを与えます。 xに縛られたデータリストのすべての要素に対する統制。他の場所で定義されている不要な機能を削除する

    、あなたが得る:

    (defn data-table-newb 
        [tbl] 
        (let [headers (table-keys tbl) 
         x (next tbl)] 
        (map #(data-record headers %) x))) 
    
  • +0

    おかげで、ジョシュを。私は自分の間違いを理解した。 –

    関連する問題