summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--bash.html.markdown5
-rw-r--r--julia.html.markdown4
-rw-r--r--ru-ru/python-ru.html.markdown2
-rw-r--r--standard-ml.html.markdown99
-rw-r--r--[-rwxr-xr-x]zh-cn/c-cn.html.markdown0
-rw-r--r--zh-cn/common-lisp-cn.html.markdown (renamed from zh-cn/common-lisp.html.markdown)59
-rw-r--r--[-rwxr-xr-x]zh-cn/elisp-cn.html.markdown0
-rw-r--r--[-rwxr-xr-x]zh-cn/git-cn.html.markdown0
-rw-r--r--zh-cn/go-cn.html.markdown (renamed from zh-cn/go-zh.html.markdown)0
-rw-r--r--[-rwxr-xr-x]zh-cn/haskell-cn.html.markdown0
-rw-r--r--[-rwxr-xr-x]zh-cn/java-cn.html.markdown0
-rw-r--r--[-rwxr-xr-x]zh-cn/javascript-cn.html.markdown0
-rw-r--r--[-rwxr-xr-x]zh-cn/php-cn.html.markdown0
-rw-r--r--[-rwxr-xr-x]zh-cn/python-cn.html.markdown0
14 files changed, 98 insertions, 71 deletions
diff --git a/bash.html.markdown b/bash.html.markdown
index 1f1c32c0..815290dd 100644
--- a/bash.html.markdown
+++ b/bash.html.markdown
@@ -5,6 +5,7 @@ contributors:
- ["Max Yankov", "https://github.com/golergka"]
- ["Darren Lin", "https://github.com/CogBear"]
- ["Alexandre Medeiros", "http://alemedeiros.sdf.org"]
+ - ["Denis Arh", "https://github.com/darh"]
filename: LearnBash.sh
---
@@ -45,6 +46,10 @@ echo '$VARIABLE'
echo ${VARIABLE/Some/A}
# This will substitute the first occurance of "Some" with "A"
+# Default value for variable
+echo ${FOO:-"DefaultValueIfFOOIsMissingOrEmpty"}
+# This works for null (FOO=), empty string (FOO=""), zero (FOO=0) returns 0
+
# Bultin variables:
# There are some useful builtin variables, like
echo "Last program return value: $?"
diff --git a/julia.html.markdown b/julia.html.markdown
index 4e89bea5..ce55f956 100644
--- a/julia.html.markdown
+++ b/julia.html.markdown
@@ -83,7 +83,7 @@ false
# A string can be indexed like an array of characters
"This is a string"[1] #=> 'T' # Julia indexes from 1
# However, this is will not work well for UTF8 strings,
-# so iterating over strings is reccommended (map, for loops, etc).
+# so iterating over strings is recommended (map, for loops, etc).
# $ can be used for string interpolation:
"2 + 2 = $(2 + 2)" #=> "2 + 2 = 4"
@@ -210,7 +210,7 @@ length(a) #=> 8
tup = (1, 2, 3) #=> (1,2,3) # an (Int64,Int64,Int64) tuple.
tup[1] #=> 1
try:
- tup[0] = 3 #=> ERROR: no method setindex!((Int64,Int64,Int64),Int64,Int64)
+ tup[1] = 3 #=> ERROR: no method setindex!((Int64,Int64,Int64),Int64,Int64)
catch e
println(e)
end
diff --git a/ru-ru/python-ru.html.markdown b/ru-ru/python-ru.html.markdown
index df4a38a8..204eb357 100644
--- a/ru-ru/python-ru.html.markdown
+++ b/ru-ru/python-ru.html.markdown
@@ -36,7 +36,7 @@ filename: learnpython-ru.py
35 / 5 #=> 7
# А вот деление немного сложнее. В этом случае происходит деление
-№ целых чисел и результат автоматически округляется в меньшую сторону.
+# целых чисел и результат автоматически округляется в меньшую сторону.
5 / 2 #=> 2
# Чтобы научиться делить, сначала нужно немного узнать о дробных числах.
diff --git a/standard-ml.html.markdown b/standard-ml.html.markdown
index bd26709c..b545f3e1 100644
--- a/standard-ml.html.markdown
+++ b/standard-ml.html.markdown
@@ -13,21 +13,21 @@ to update variables can feel severely inhibiting.
```ocaml
(* Comments in Standard ML begin with (* and end with *). Comments can be
- nested which means that all (* tags must end with a *) tag. This comment
- contains two nested comments. *)
+ nested which means that all (* tags must end with a *) tag. This comment,
+ for example, contains two nested comments. *)
(* A Standard ML program consists of declarations, e.g. value declarations: *)
val rent = 1200
val phone_no = 5551337
val pi = 3.14159
-val negative_number = ~15 (* Yeah, unary minus is a so-called 'tilde' *)
+val negative_number = ~15 (* Yeah, unary minus uses the 'tilde' symbol *)
(* And just as importantly, functions: *)
fun is_large(x : int) = if x > 37 then true else false
(* Floating-point numbers are called "reals". *)
-val tau = 2.0 * pi (* You can multiply reals *)
-val twice_rent = 2 * rent (* You can multiply ints *)
+val tau = 2.0 * pi (* You can multiply two reals *)
+val twice_rent = 2 * rent (* You can multiply two ints *)
(* val meh = 1.25 * 10 *) (* But you can't multiply an int and a real *)
(* +, - and * are overloaded so they work for both int and real. *)
@@ -42,16 +42,16 @@ val negative_rent = ~(rent) (* Would also have worked if rent were a "real" *)
(* There are also booleans and boolean operators *)
val got_milk = true
val got_bread = false
-val has_breakfast = got_milk andalso got_bread (* Yes, it's called andalso *)
-val has_something = got_milk orelse got_bread (* Yes, it's called orelse *)
+val has_breakfast = got_milk andalso got_bread (* 'andalso' is the operator *)
+val has_something = got_milk orelse got_bread (* 'orelse' is the operator *)
val is_sad = not(has_something) (* not is a function *)
(* Many values can be compared using equality operators: = and <> *)
val pays_same_rent = (rent = 1300) (* false *)
val is_wrong_phone_no = (phone_no <> 5551337) (* false *)
-(* The operator <> is what most other languages call != *)
-
+(* The operator <> is what most other languages call !=. *)
+(* 'andalso' and 'orelse' are called && and || in many other languages. *)
(* Actually, most of the parentheses above are unnecessary. Here are some
different ways to say some of the things mentioned above: *)
@@ -61,7 +61,7 @@ val pays_same_rent = rent = 1300 (* Looks confusing, but works *)
val is_wrong_phone_no = phone_no <> 5551337
val negative_rent = ~rent (* ~ rent (notice the space) would also work *)
-(* Parens are mostly necessary when grouping things: *)
+(* Parentheses are mostly necessary when grouping things: *)
val some_answer = is_large (5 + 5) (* Without parens, this would break! *)
(* val some_answer = is_large 5 + 5 *) (* Read as: (is_large 5) + 5. Bad! *)
@@ -84,32 +84,37 @@ val bar = [ #"H", #"e", #"l", #"l", #"o" ] (* SML also has lists! *)
are functions available in that library that take strings as argument. *)
val bob = String.implode bar (* gives "Hello" *)
val bob_char_count = String.size bob (* gives 5 *)
-val _ = print (bob ^ "\n") (* For good measure, add a linebreak *)
+val _ = print (bob ^ "\n") (* For good measure, add a linebreak *)
(* You can have lists of any kind *)
val numbers = [1, 3, 3, 7, 229, 230, 248] (* : int list *)
val names = [ "Fred", "Jane", "Alice" ] (* : string list *)
+
+(* Even lists of lists of things *)
val groups = [ [ "Alice", "Bob" ],
[ "Huey", "Dewey", "Louie" ],
[ "Bonnie", "Clyde" ] ] (* : string list list *)
val number_count = List.length numbers (* gives 7 *)
-(* You can put single values in front of lists of the same kind
- using the :: ("cons") operator *)
+(* You can put single values in front of lists of the same kind using
+ the :: operator, called "the cons operator" (known from Lisp). *)
val more_numbers = 13 :: numbers (* gives [13, 1, 3, 3, 7, ...] *)
val more_groups = ["Batman","Superman"] :: groups
(* Lists of the same kind can be appended using the @ ("append") operator *)
val guest_list = [ "Mom", "Dad" ] @ [ "Aunt", "Uncle" ]
-(* This could have been done with the "cons" operator *)
+(* This could have been done with the "cons" operator. It is tricky because the
+ left-hand-side must be an element whereas the right-hand-side must be a list
+ of those elements. *)
val guest_list = "Mom" :: "Dad" :: [ "Aunt", "Uncle" ]
+val guest_list = "Mom" :: ("Dad" :: ("Aunt" :: ("Uncle" :: [])))
(* If you have many lists of the same kind, you can concatenate them all *)
val everyone = List.concat groups (* [ "Alice", "Bob", "Huey", ... ] *)
-(* A list can contain any (finite) amount of values *)
+(* A list can contain any (finite) number of values *)
val lots = [ 5, 5, 5, 6, 4, 5, 6, 5, 4, 5, 7, 3 ] (* still just an int list *)
(* Lists can only contain one kind of thing... *)
@@ -264,21 +269,23 @@ fun map f [] = []
(* 'a is called a type variable. *)
-(* We can define functions as infix *)
-fun plus (x, y) = x + y
-infix plus
-(* We can now call plus like "2 plus 5" *)
+(* We can declare functions as infix *)
+val plus = add_them (* plus is now equal to the same function as add_them *)
+infix plus (* plus is now an infix operator *)
+val seven = 2 plus 5 (* seven is now bound to 7 *)
-(* Functions can also be made infix before they are defined *)
+(* Functions can also be made infix before they are declared *)
infix minus
-fun x minus y = x - y
+fun x minus y = x - y (* It becomes a little hard to see what's the argument *)
+val four = 8 minus 4 (* four is now bound to 4 *)
-(* An infix function/operator can be made prefix with "op" *)
-val n = op + (5, 5)
-(* n is now 10 *)
+(* An infix function/operator can be made prefix with 'op' *)
+val n = op + (5, 5) (* n is now 10 *)
-(* op is useful when combined with high order functions *)
-val listSum = foldl op + 0 [1,2,3,4,5]
+(* 'op' is useful when combined with high order functions because they expect
+ functions and not operators as arguments. Most operators are really just
+ infix functions. *)
+val sum_of_numbers = foldl op+ 0 [1,2,3,4,5]
(* Datatypes are useful for creating both simple and complex structures *)
@@ -291,6 +298,8 @@ fun say(col) =
if col = Blue then "You are blue!" else
raise Fail "Unknown color"
+val _ = print (say(Red) ^ "\n")
+
(* Datatypes are very often used in combination with pattern matching *)
fun say Red = "You are red!"
| say Green = "You are green!"
@@ -318,28 +327,40 @@ val myTree = Node (Leaf 9, 8, Node (Leaf 3, 5, Leaf 7))
fun count (Leaf n) = n
| count (Node (leftTree, n, rightTree)) = count leftTree + n + count rightTree
+val myTreeCount = count myTree (* myTreeCount is now bound to 32 *)
-(* Exceptions! *)
-(* Exceptions can be raised using "raise" *)
-fun raiseException msg = raise Fail msg
-(* This raises exception `Fail "hello from exception"` *)
-(* val _ = raiseException "hello from exception" *)
+(* Exceptions! *)
+(* Exceptions can be raised/thrown using the reserved word 'raise' *)
+fun calculate_interest(n) = if n < 0.0
+ then raise Domain
+ else n * 1.04
(* Exceptions can be caught using "handle" *)
-val x = raiseException "hello" handle Fail msg => msg
-(* x now has the value "hello" *)
+val balance = calculate_interest ~180.0
+ handle Domain => ~180.0 (* x now has the value ~180.0 *)
-(* We can pattern match in "handle" to make sure
+(* Some exceptions carry extra information with them *)
+(* Here are some examples of built-in exceptions *)
+fun failing_function [] = raise Empty (* used for empty lists *)
+ | failing_function [x] = raise Fail "This list is too short!"
+ | failing_function [x,y] = raise Overflow (* used for arithmetic *)
+ | failing_function xs = raise Fail "This list is too long!"
+
+(* We can pattern match in 'handle' to make sure
a specfic exception was raised, or grab the message *)
-val y = raiseException "..." handle Fail _ => "Fail was raised"
- | Domain => "Domain was raised"
-(* y now has the value "Fail was raised" *)
+val err_msg = failing_function [1,2] handle Fail _ => "Fail was raised"
+ | Domain => "Domain was raised"
+ | Empty => "Empty was raised"
+ | _ => "Unknown exception"
+
+(* err_msg now has the value "Unknown exception" because Overflow isn't
+ listed as one of the patterns -- thus, the catch-all pattern _ is used. *)
(* We can define our own exceptions like this *)
exception MyException
exception MyExceptionWithMessage of string
-
+exception SyntaxError of string * (int * int)
(* File I/O! *)
(* Write a nice poem to a file *)
@@ -372,4 +393,4 @@ val test_poem = readPoem "roses.txt" (* gives [ "Roses are red,",
[SML/NJ](http://smlnj.org/).
* Follow the Coursera course [Programming Languages](https://www.coursera.org/course/proglang).
* Get the book *ML for the Working Programmer* by Larry C. Paulson.
-
+* Use [StackOverflow's sml tag](http://stackoverflow.com/questions/tagged/sml).
diff --git a/zh-cn/c-cn.html.markdown b/zh-cn/c-cn.html.markdown
index b4bff8fc..b4bff8fc 100755..100644
--- a/zh-cn/c-cn.html.markdown
+++ b/zh-cn/c-cn.html.markdown
diff --git a/zh-cn/common-lisp.html.markdown b/zh-cn/common-lisp-cn.html.markdown
index e623ad1a..f005dd58 100644
--- a/zh-cn/common-lisp.html.markdown
+++ b/zh-cn/common-lisp-cn.html.markdown
@@ -5,15 +5,16 @@ contributors:
- ["Paul Nathan", "https://github.com/pnathan"]
translators:
- ["Mac David", "http://macdavid313.com"]
+ - ["mut0u", "http://github.com/mut0u"]
lang: zh-cn
---
ANSI Common Lisp 是一个广泛通用于各个工业领域的、支持多种范式的编程语言。
这门语言也经常被引用作“可编程的编程语言”(可以写代码的代码)。
-经典的入门点为[已完全免费提供的《实用 Common Lisp 编程》](http://www.gigamonkeys.com/book/)
+免费的经典的入门书籍[《实用 Common Lisp 编程》](http://www.gigamonkeys.com/book/)
-另外还有一本近期内比较热门的
+另外还有一本热门的近期出版的
[Land of Lisp](http://landoflisp.com/).
```scheme
@@ -23,7 +24,7 @@ ANSI Common Lisp 是一个广泛通用于各个工业领域的、支持多种范
;;; 一般形式
-;; Lisp有两个基本的语法部件:原子,以及S-表达式。
+;; Lisp有两个基本的语法单元:原子(atom),以及S-表达式。
;; 一般的,一组S-表达式被称为“组合式”。
10 ; 一个原子; 它对自身进行求值
@@ -52,12 +53,12 @@ t ;还是一个原子,代表逻辑真值。
;;; 运行环境
-;; 有很多不同的Common Lisp的实现;并且大部分的实现是符合标准的。
+;; 有很多不同的Common Lisp的实现;并且大部分的实现是一致(可移植)的。
;; 对于入门学习来说,CLISP是个不错的选择。
;; 可以通过QuickLisp.org's Quicklisp系统可以管理你的库。
-;; 通常,使用一个文本编辑器和一个同时在运行的“REPL”来开发Common Lisp;
+;; 通常,使用一个文本编辑器和一个的“REPL”来开发Common Lisp;
;; (译者注:“REPL”指读取-求值-打印循环)。
;; “REPL”允许对程序进行交互式的运行、调试,就好像在系统中这是一场“现场直播”。
@@ -120,10 +121,10 @@ nil ; 逻辑假,或者空列表
"Hello, world!"
"Benjamin \"Bugsy\" Siegel" ;反斜杠用作转义字符
-;; 字符串可以被连接起来
+;; 可以拼接字符串
(concatenate 'string "Hello " "world!") ; => "Hello world!"
-;; 一个字符串也可被视作一个字符的序列
+;; 一个字符串也可被视作一个字符序列
(elt "Apple" 0) ; => #\A
;; `format`被用于格式化字符串
@@ -138,9 +139,10 @@ nil ; 逻辑假,或者空列表
;; 2. 变量
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 你可以通过`defparameter`创建一个全局(动态)变量
-;; 除了:()[]{}",'`;#|\ 这些字符,其他任何字符都可被用于变量名
+;; 变量名可以是除了:()[]{}",'`;#|\ 这些字符之外的其他任何字符
;; 动态变量名应该由*号开头与结尾!
+;; (译者注:这个只是一个习惯)
(defparameter *some-var* 5)
*some-var* ; => 5
@@ -153,7 +155,7 @@ nil ; 逻辑假,或者空列表
;; 不要尝试那样做。
-;; 局部绑定:'me'被绑定到"dance with you"上,当且仅当它在(let ...)内有效。
+;; 局部绑定:在(let ...)语句内,'me'被绑定到"dance with you"上。
;; `let`总是返回在其作用域内最后一个表达式的值
(let ((me "dance with you"))
@@ -177,7 +179,7 @@ nil ; 逻辑假,或者空列表
;; Dog-p,make-dog,以及 dog-name都是由defstruct创建的!
-;;; 点对单元
+;;; 点对单元(Pairs)
;; `cons`可用于生成一个点对单元, 利用`car`以及`cdr`将分别得到第一个和第二个元素
(cons 'SUBJECT 'VERB) ; => '(SUBJECT . VERB)
(car (cons 'SUBJECT 'VERB)) ; => SUBJECT
@@ -185,7 +187,7 @@ nil ; 逻辑假,或者空列表
;;; 列表
-;; 所有列表都是由点对单元构成、并以'nil'(或者'())结尾的一种被称为“链表”的数据结构
+;; 所有列表都是由点对单元构成的“链表”。它以'nil'(或者'())作为列表的最后一个元素。
(cons 1 (cons 2 (cons 3 nil))) ; => '(1 2 3)
;; `list`是一个生成列表的便利途径
(list 1 2 3) ; => '(1 2 3)
@@ -274,7 +276,7 @@ nil ; 逻辑假,或者空列表
;; 然而,你可能想使用一个更好的数据结构,而并非一个链表
-;;; 在Common Lisp中,你也可以使用“字典”的概念——哈希表
+;;; 在Common Lisp中,“字典”和哈希表的实现是一样的。
;; 创建一个哈希表
(defparameter *m* (make-hash-table))
@@ -285,7 +287,7 @@ nil ; 逻辑假,或者空列表
;; (通过键)检索对应的值
(gethash 'a *m*) ; => 1, t
-;; 注意此处有一细节:Common Lisp的`gethash`往往会返回两个值。
+;; 注意此处有一细节:Common Lisp往往返回多个值。`gethash`返回的两个值是t,代表找到了这个元素;返回nil表示没有找到这个元素。
;;(译者注:返回的第一个值表示给定的键所对应的值或者nil;)
;;(第二个是一个布尔值,表示在哈希表中是否存在这个给定的键)
;; 例如,如果可以找到给定的键所对应的值,则返回一个t,否则返回nil
@@ -370,7 +372,7 @@ nil ; 逻辑假,或者空列表
; => Hello, Mr Jim, from the alpacas you met last summer
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; 4. 等价性
+;; 4. 等式
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Common Lisp具有一个十分复杂的用于判断等价的系统,下面只是其中一部分的例子
@@ -381,9 +383,11 @@ nil ; 逻辑假,或者空列表
;; 若要比较对象的类型,则使用`eql`
;;(译者注:抱歉,翻译水平实在有限,下面是我个人的补充说明)
-;;(`eql`在二者`eq`等价,或者同为数字与字符下相同的类型)
+;;(`eq` 返回真,如果对象的内存地址相等)
+;;(`eql` 返回真,如果两个对象内存地址相等,或者对象的类型相同,并且值相等)
;;(例如同为整形数或浮点数,并且他们的值相等时,二者`eql`等价)
-;; (想要弄清`eql`,其实有必要先了解`eq`)
+;;(想要弄清`eql`,其实有必要先了解`eq`)
+;;([可以参考](http://stackoverflow.com/questions/547436/whats-the-difference-between-eq-eql-equal-and-equalp-in-common-lisp))
;;(可以去CLHS上分别查看两者的文档)
;;(另外,《实用Common Lisp编程》的4.8节也提到了两者的区别)
(eql 3 3) ; => t
@@ -400,12 +404,12 @@ nil ; 逻辑假,或者空列表
;;; 条件判断语句
-(if t ; “测试”,即判断语句
- "this is true" ; “下一步”,即判断条件为真时求值的表达式
- "this is false") ; “否则”,即判断条件为假时求值的表达式
+(if t ; “test”,即判断语句
+ "this is true" ; “then”,即判断条件为真时求值的表达式
+ "this is false") ; “else”,即判断条件为假时求值的表达式
; => "this is true"
-;; 在“测试”(判断)语句中,所有非nil或者非()的值都被视为真值
+;; 在“test”(判断)语句中,所有非nil或者非()的值都被视为真值
(member 'Groucho '(Harpo Groucho Zeppo)) ; => '(GROUCHO ZEPPO)
(if (member 'Groucho '(Harpo Groucho Zeppo))
'yep
@@ -450,7 +454,7 @@ nil ; 逻辑假,或者空列表
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; 6. 变异
+;; 6. 可变性
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 使用`setf`可以对一个已经存在的变量进行赋值;
@@ -461,15 +465,13 @@ nil ; 逻辑假,或者空列表
; => 2
-;; 所谓好的Lisp编码风格就是为了减少破坏性函数的使用,防止副作用的发生。
-;;(译者注:很惭愧,确实不明白原作者的“变异”到底指的是什么特性)
-;;(我猜测应该是和词法变量、闭包等特性有关,还望高人指点、修正与完善)
+;; 所谓好的Lisp编码风格就是为了减少使用破坏性函数,防止发生副作用。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 7. 类与对象
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; 我们就不写什么有关动物的类了,下面给出的是一个很“人文主义”的类
+;; 我们就不写什么有关动物的类了,下面给出的人力车的类
(defclass human-powered-conveyance ()
((velocity
@@ -481,7 +483,7 @@ nil ; 逻辑假,或者空列表
(:documentation "A human powered conveyance"))
;; `defclass`,后面接类名,以及超类列表
-;; 再接着是槽的列表(槽有点像Java里的字段),最后是一些可选的特性
+;; 再接着是槽的列表(槽有点像Java里的成员变量),最后是一些可选的特性
;; 例如文档说明“:documentation”
;; 如果超类列表为空,则默认该类继承于“standard-object”类(standard-object又是T的子类)
@@ -545,8 +547,7 @@ nil ; 逻辑假,或者空列表
;; 假设我们已经知道了效率值(“efficiency value”)和船桨数大概呈对数关系;
;; 那么效率值的定义应当在构造器/初始化过程中就被完成。
-;; 下面是一个如何初始化实例的例子:
-;; 构造它:
+;; 下面是一个Common Lisp构造实例时初始化实例的例子:
(defmethod initialize-instance :after ((object canoe) &rest args)
(setf (average-efficiency object) (log (1+ (number-of-rowers object)))))
@@ -564,7 +565,7 @@ nil ; 逻辑假,或者空列表
;; 宏可以让你扩展语法
;; 例如,Common Lisp并没有自带WHILE循环——所以让我们自己来为他添加一个;
-;; 如果按照“拼装者”的直觉来看,我们会这样写:
+;; 如果按照汇编程序的直觉来看,我们会这样写:
(defmacro while (condition &body body)
"While `condition` is true, `body` is executed.
diff --git a/zh-cn/elisp-cn.html.markdown b/zh-cn/elisp-cn.html.markdown
index d303c2e8..d303c2e8 100755..100644
--- a/zh-cn/elisp-cn.html.markdown
+++ b/zh-cn/elisp-cn.html.markdown
diff --git a/zh-cn/git-cn.html.markdown b/zh-cn/git-cn.html.markdown
index 4ef3ffb8..4ef3ffb8 100755..100644
--- a/zh-cn/git-cn.html.markdown
+++ b/zh-cn/git-cn.html.markdown
diff --git a/zh-cn/go-zh.html.markdown b/zh-cn/go-cn.html.markdown
index 7cc9c171..7cc9c171 100644
--- a/zh-cn/go-zh.html.markdown
+++ b/zh-cn/go-cn.html.markdown
diff --git a/zh-cn/haskell-cn.html.markdown b/zh-cn/haskell-cn.html.markdown
index 8d51f144..8d51f144 100755..100644
--- a/zh-cn/haskell-cn.html.markdown
+++ b/zh-cn/haskell-cn.html.markdown
diff --git a/zh-cn/java-cn.html.markdown b/zh-cn/java-cn.html.markdown
index f7d319e6..f7d319e6 100755..100644
--- a/zh-cn/java-cn.html.markdown
+++ b/zh-cn/java-cn.html.markdown
diff --git a/zh-cn/javascript-cn.html.markdown b/zh-cn/javascript-cn.html.markdown
index 89fc256e..89fc256e 100755..100644
--- a/zh-cn/javascript-cn.html.markdown
+++ b/zh-cn/javascript-cn.html.markdown
diff --git a/zh-cn/php-cn.html.markdown b/zh-cn/php-cn.html.markdown
index c6ebb515..c6ebb515 100755..100644
--- a/zh-cn/php-cn.html.markdown
+++ b/zh-cn/php-cn.html.markdown
diff --git a/zh-cn/python-cn.html.markdown b/zh-cn/python-cn.html.markdown
index deb94cdc..deb94cdc 100755..100644
--- a/zh-cn/python-cn.html.markdown
+++ b/zh-cn/python-cn.html.markdown