![](/img/trans.png)
[英]Clojure: how to apply a function to hash-map values, some of which are vectors
[英]Clojure transform map values which are vectors to set
我是Clojure的新手。 我有一張像
{:title "The Little Schemer"
:authors [friedman , felleisen]}
我想將其轉換為:
{:title "The Little Schemer"
:authors #{friedman , felleisen}}
我嘗試過:
(def friedman {:name "Daniel Friedman" :birth-year 1944})
(def felleisen {:name "Matthias Felleisen"})
(defn old-book->new-book [book]
(set (:authors book)
)
)
(println (old-book->new-book {:title "The Little Schemer"
:authors [friedman , felleisen]}))
; => Output: #{{:name Daniel Friedman, :birth-year 1944} {:name Matthias Felleisen}}
; => Expected-Output: #{friedman , felleisen}
在這里, defs
friedman
和felleisen
被執行,結果被轉換為set。 但是,我希望將函數名稱轉換為set而不是其結果。
首先嘗試println
:
(println {:title "The Little Schemer"
:authors [friedman , felleisen]})
輸出將是:
{:title The Little Schemer, :authors [{:name Daniel Friedman, :birth-year 1944} {:name Matthias Felleisen}]}
那么,這里發生了什么? 如您所知,在這種情況下, friedman
和felleisen
是變量,因此,如果您打印它們,它們將按值顯示在打印消息中。 例如:
(def a 1)
(println a)
將打印1
,因為a
只是一個變量。
你這里顯示的代碼做什么你想,當你打印它-那么變量的值, friedman
和felleisen
的值替代。
處置函數set
后,您的autors( (:authors [friedman felleisen])
)向量將轉換為set
,即從輸出中看到的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.