DTeam团队日志每周500字

F周刊:2017-03-27

2017-03-27  本文已影响89人  胡键

20 cool Clojure functions

对于初学者非常有益的文章,即便Clojure不是你的菜,这篇文章也可以帮助你了解函数式编程的若干应用,尽管不是那么系统。至于为何Clojure值得一学,窃以为:

要说学习曲线,确实不低,但一旦学成,你会看到另一片风景。再说,君不见几个小语种其实非常吃香吗?

最后说一下我现在用的配套工具

STATE OF CLOJURE 2016 RESULTS AND ANALYSIS

2016年的Clojure调查汇总,我最关心的就是后半部的若干工具和环境。至于前面的,肯定是“形势一片大好”,看不看无所谓。

Clojure By Example

要说Clojure好学,不是炫耀智商,就是虚假广告。咱们普通人还是多看例子为佳!

JSONB type performance in PostgreSQL 9.4
When To Avoid JSONB In A PostgreSQL Schema

在用Json/Jsonb之前,先读这两篇文章。简单的总结如下:

Proliferation of NUMERIC

跟上面推荐的两个链接类似,此文讲的是NUMBERIC的问题。由于类似Oracle中的Number类型,有Oracle经验的人都会对它有感情,但它并非万灵药。原因无外乎性能二字。

文章本身很简单,但其中提到几个知识点适合PG的初学者:

威秀影城 App 如何在每個可以搞砸 UX 的地方全部搞砸

干巴巴的设计规范很容易让人过眼即忘,一篇生动的案例教学就不一样了。

最后,来一段遗传算法版的“Hello World” Clojure代码让大家体验一下用它写应用的感觉。它的大体算法是先从字母表随机生成一段字符串,然后一次改变一个字符,最终进化成“Hello World!”字符串。

(ns myga.core)

(def geneSet " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!.")
(def target "Hello World!")

(defn generate-parent
  [length]
  (apply str (take length (shuffle (seq geneSet)))))

(defn get-fitness
  [guess]
  (count (filter identity (map = target guess))))

(defn mutate
  [parent]
  (let [i (rand-int (count parent))
        new-genes (take 2 (shuffle (seq geneSet)))
        new1 (nth new-genes 0)
        new2 (nth new-genes 1)]
    (if (= (nth parent i) new1)
      (str (subs parent 0 i) new2 (subs parent (inc i)))
      (str (subs parent 0 i) new1 (subs parent (inc i))))))

(defn display
  [guess]
  (println (format "%s\t%d" guess (get-fitness guess))))

(defn children
  ([] (children (generate-parent 12)))
  ([parent]
    (if (= parent target)
      (lazy-seq (cons parent (children parent)))
      (loop [child (mutate parent)]
        (if (> (get-fitness child) (get-fitness parent))
          (lazy-seq (cons parent (children child)))
          (recur (mutate parent)))))))

(defn -main
  [& args]
  (let [generation (take 13 (children))]
    (loop [current 1
            current-element (nth generation current)]
      (display current-element)
      (if (= current-element target)
        target
        (recur (inc current) (nth generation current))))))
上一篇 下一篇

猜你喜欢

热点阅读