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