Merge pull request #478 from jingege/master

[clojure/cn]Wrap some lines to fit the view.
This commit is contained in:
Adam Bard 2014-01-05 20:07:24 -08:00
commit 819c5fb625

View File

@ -81,7 +81,7 @@ Clojure是运行在JVM上的Lisp家族中的一员。她比Common Lisp更强调
(seq? '(1 2 3)) ; => true
(seq? [1 2 3]) ; => false
; 序列被访问时只需要提供一个值,所以序列可以被懒加载 —— 也就意味着可以定义一个无限序列:
; 序列被访问时只需要提供一个值,所以序列可以被懒加载——也就意味着可以定义一个无限序列:
(range 4) ; => (0 1 2 3)
(range) ; => (0 1 2 3 4 ...) (无限序列)
(take 4 (range)) ; (0 1 2 3)
@ -163,11 +163,13 @@ x ; => 1
; 哈希表
;;;;;;;;;;
; 基于hash的map和基于数组的map即arraymap实现了相同的接口hashmap查询起来比较快但不保证元素的顺序。
; 基于hash的map和基于数组的map即arraymap实现了相同的接口hashmap查询起来比较快
; 但不保证元素的顺序。
(class {:a 1 :b 2 :c 3}) ; => clojure.lang.PersistentArrayMap
(class (hash-map :a 1 :b 2 :c 3)) ; => clojure.lang.PersistentHashMap
; arraymap在足够大的时候大多数操作会将其自动转换成hashmap所以不用担心(对大的arraymap的查询性能)。
; arraymap在足够大的时候大多数操作会将其自动转换成hashmap
; 所以不用担心(对大的arraymap的查询性能)。
; map支持很多类型的key但推荐使用keyword类型
; keyword类型和字符串类似但做了一些优化。
@ -275,7 +277,7 @@ keymap ; => {:a 1, :b 2, :c 3}
(str/replace "This is a test." #"[a-o]" str/upper-case) ; => "THIs Is A tEst."
; (#""用来表示一个正则表达式)
; 你可以在一个namespace定义里用`:require`的方式来requireuse但最好不要用模块。
; 你可以在一个namespace定义里用:require的方式来require或use但最好不要用模块。
; 这样的话你无需引用模块列表。
(ns test
(:require
@ -314,12 +316,14 @@ keymap ; => {:a 1, :b 2, :c 3}
; STM
;;;;;;;;;;;;;;;;;
; 软件内存事务Software Transactional Memory被clojure用来处理持久化的状态。clojure里内置了一些结构来使用STM。
; 软件内存事务Software Transactional Memory被clojure用来处理持久化的状态。
; clojure里内置了一些结构来使用STM。
; atom是最简单的。给它传一个初始值
(def my-atom (atom {}))
; 用`swap!`更新atom。
; `swap!`会以atom的当前值为第一个参数来调用一个指定的函数`swap`其余的参数作为该函数的第二个参数。
; `swap!`会以atom的当前值为第一个参数来调用一个指定的函数
; `swap`其余的参数作为该函数的第二个参数。
(swap! my-atom assoc :a 1) ; Sets my-atom to the result of (assoc {} :a 1)
(swap! my-atom assoc :b 2) ; Sets my-atom to the result of (assoc {:a 1} :b 2)