Clojure 难道你们还没学 Clojure ?

Saito · 2013年01月05日 · 最后由 mjf429 回复于 2014年04月24日 · 8802 次阅读

程序设计的美学都在这里了.

贴一小段笔记:

Data Structures:

nil: nil

char: \c or (char c)

number: 1 or (num 1)

string: "abc" or (str abc) ???

keyword: :a or (keyword "a")

symbols: 'a or (quote a)

boolean: false or (boolean false)

list: '(1 2 3) or (list 1 2 3)

vector: [1 2 3] or (vector 1 2 3)

hash: {:a 1, :b 2} or (hash-map :a 1 :b 2)

set: #{1 2 3} or (hash-set 1 2 3)

Clojure Seq

ASeq LazySeq

Seqable null Iterable Array CharSequence Map

Seq Interface

(first coll)

(rest coll)

(cons item coll)

Seq Library

range

user=> (range 10) (0 1 2 3 4 5 6 7 8 9) user=> (range 1 10) (1 2 3 4 5 6 7 8 9) user=> (range 1 10 2) (1 3 5 7 9)

repeat

user=> (repeat 10) (10 10 10 10 10 10 10 10 10 10 ...) user=> (repeat 1 10) (10)

iterate

user=> (iterate inc 1) (1 2 3 4 5 6 7 8 9 10 ...)

take

user=> (take 1 (repeat 10)) (10)

map

user=> (map #(* % 2) (range 1 10)) (2 4 6 8 10 12 14 16 18)

reduce

user=> (reduce + (range 10)) 45

for

user=> (for x (range 1 10)) (2 4 6 8 10 12 14 16 18)

filter

user=> (filter even? (range 10)) (0 2 4 6 8)

remove

user=> (remove even? (range 10)) (1 3 5 7 9)

replace

user=> (replace [1 2 3 4 5] [4 3 2 1 0]) [5 4 3 2 1] user=> (replace ["a" ">" "b"] [2 1 0]) ["b" ">" "a"]

cycle

user=> (cycle [0 1 2]) (0 1 2 0 1 2 0 1 2 0 ...)

reverse

user=> (reverse (range 10)) (9 8 7 6 5 4 3 2 1 0)

shuffle

user=> (shuffle (range 10)) [1 4 8 0 6 3 9 2 5 7]

sort

user=> (sort (shuffle (range 10))) (0 1 2 3 4 5 6 7 8 9)

flatten

user=> (flatten '(1 2 3 7 8 [9])) (1 2 3 4 5 6 7 8 9)

distinct

user=> (distinct [1 2 3 1 2]) (1 2 3)

interleave

user=> (interleave [:a :b] [1 2]) (:a 1 :b 2) user=> (interleave :a :b :c) (:a 1 :b 2 :c 3)

interpose

(interpose "," [:a :b :c]) (:a "," :b "," :c) user=> (apply str (interpose ", " [:a :b :c])) ":a, :b, :c"

into

user=> (into (reverse (range 5)) (range 5 10)) (9 8 7 6 5 4 3 2 1 0)

split-at

user=> (split-at 5 (range 10)) [(0 1 2 3 4) (5 6 7 8 9)]

partition

user=> (partition 2 (range 10)) ((0 1) (2 3) (4 5) (6 7) (8 9)) user=> (partition 2 3 (range 10)) ((0 1) (3 4) (6 7)) user=> (partition 2 3 10) ((0 1) (3 4) (6 7) (9 10))

->

user=> (-> 5 (+ 2) (- 3) (* 2)) 8

user=> (-> "x y z" .toUpperCase (.replace "X" "A") (.split " ") first) "A"

新纪元下你还抢着学 Go? 醒醒吧!...

Clojure Document: http://clojure.org/documentation

Clojure Docs: http://clojuredocs.org/quickref/Clojure%20Core

Clojure Cheatsheet : https://github.com/jafingerhut/clojure-cheatsheets/tree/master/pdf

Clojure koans : https://github.com/functional-koans/clojure-koans

Clojure ring( like rack ): https://github.com/ring-clojure/ring

From Narkoz

Clojure style guide: https://github.com/bbatsov/clojure-style-guide

Ruby + Clojure: https://github.com/rouge-lang/rouge

发文前在本地打底稿多么地重要!

共收到 27 条回复

...........

主题有底稿,底下的那些欢乐的回复就真的木有了。。。

(其实我挺喜欢看难道你们还没学 xxxx ?这个系列来着

非常速度地开辟了新战场....

rework XD

怀念屠龙那个贴......

发文前在本地打底稿多么地重要!

经典!

我是订阅了本站的,可是这文在 google reader 上没搜到。。。。。

重新创建了 Clojure 节点,然后把你的文章移动过去了。

……………………难道是传说中的,没有备份吗

#6 楼 @skandhas 论底稿的重要性, 其实不关乎内容.. 最主要是格式!

悲剧,没看出美学在哪里,求科普吧…… 感觉和 ruby 差不多啊……

来到 ruby 的地盘打广告,当初不少忽悠 java 到 ruby 的,现在忽悠 ruby 到 clojure,还有一个 scala 怎么比较少的人忽悠。我是正在学 clojure。

正在看 korma, 感觉有 sqlalchemy 的潜力

(select :users (fields :id :employees.name) 
    (join :employees (= :users.employee_id :employees.id)))

#13 楼 @fastzhong 反正我是查 API 的时候放弃的:

!![]((http://d.pr/i/xB5S+)

学习 scala 的时候, 如果没有学过 haskell 并获得代数数据类型的相关知识, 是搞不定的

#16 楼 @luikore 就等你今天科普 Haskell, 反攻 Scala 了.

#13 楼 @fastzhong 本来 2.10 release 那天想发个类似的系列贴介绍介绍的,不过好像有人开始不满了也就没去弄了 XD
而且个人感觉 Scala 开始向一个 奇怪的方向发展了,也越来越复杂了:加入了 类似 method_missingapplyDynamic 方法,加上新的反射机制揉出一个 Scala 元编程, 又不知为何加入了 Macros。引用 Twitter 上面某人的话:"because none of these pepole are writing code for money. "。

不过,2.10 引入了 AKKA 的异步算子(Future),11 年等到现在总算是来了:)若果再有 Dataflow 那就更好了。

#14 楼 @jjx 有 STM 的语言: haskell, clojure 其实都不需要 SQL 数据库了

#20 楼 @narkoz WoW, rouge is cool! ..

I added these two links to my topic. Thanks 😄

好吧,看到 Rouge, 我欲哭无泪。

#22 楼 @James_Zhan 好吧,clojure 的语法确实舒服,学会了什么 clojurescript,rouge。。。scheme, common lisp 都搞定了。

@vmlinz 我觉得是学会了 lisp,就不想用 clojure 了。太多微创新的语法和符号了。

#25 楼 @jarodzz 嗯,lisp/scheme 是基础,common lisp 和 clojure 都是生产型语言,函数库要丰富的多。大家都相通的,看着手册应该都没啥问题

我已经决定不再折腾语言了,就搞 clojure 一种了,clojure 是这么多年我见到的最舒服的编程语言了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册