clojure学习记录
take 從列表中獲取子列表
into a b ?把b conj 到a中
?
(defn count-a-seq [lat]
? (reduce (fn [x y] (+ x 1)) 0 lat))
reduce 將list通過fn一個個合并成一個,當然也可以只是對每個進行+1
?
(defn [x & xs]
reduce #(if (> %1 %2) %1 %2) x xs?
)
?
#(mapcat vector %1 %2)
對%1 %2每個對應元素進行vector,然后concat在一起
?
drop-last 干掉最后一個
flatten 將所有集合合并在一起
take-last 取最后幾個
?
comp 返回一個將所有參數函數從右到左依次應用的函數
( (apply comp (repeat ntime (if (> n 0) lshift rshift))) coll))
?
{} #{} hash-map and hash-set
(contains? [1 1 1 1 1] 4) => true 因為contains只看index
?some 取第一個滿足條件的
?
?(take 10 (map last (iterate (fn [[x y]] [y (+ x y)]) [0 1]))) 迭代器的每個元素是一個二元組,最終取出其中一個組成fib
?
?flattern
(defn flat [coll]
(mapcat
#(if (sequential? %) (flat %) [%]) coll))
?
https://github.com/qiuxiafei/4clojure/blob/master/answers/28.Flatten%20a%20Sequence
(filter (complement sequential?) (tree-seq sequential? identity '((1 2) 3 [4 [5 6]])))
別人的版本,通過映射成樹,然后收集葉子節點來進行flattern,想法不錯哦
?
group-by identity coll 通過identity變成hash-map一個key一個vector的形式、
map hash-map的時候使用 (fn [[k v]] [k (count v)])
into {} ?([:b 3] [:a 2]) =>?
(conj nil num) 這樣可以建立一個'(num)
--------------
?
突然想到從cfunc - object -lisp的一個變遷的過程,可能是越來越抽象
比如map這個函數,把平時的普通循環做的事情抽象到每個做映射,這個是普通java里沒有的抽象,而這種抽象在lisp里處處可見
?
前綴的=,可以任意參數的
轉載于:https://www.cnblogs.com/TLightSky/p/4127418.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的clojure学习记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个很有借鉴价值的编程故事(转)
- 下一篇: 我的notepad++