Clojure学习02:语法
相比我们传统的 c ,java ,python ,javascript等,Clojure的语法比较特别,初一看,还可能会有些不适应。
本文来介绍下Clojure的语法特点。
一、表达式
所有的Clojure代码都是由表达式组成的,每个表达式都会产生一个值。
常见的表达式如:
60
[2 4 6]
(+ 1 2)
(average [2 3 4])
1)上面的第一个表达式就是一个字面常量,这里是一个整数。
2)第二个是个整数序列。
3)第3和4 都是函数调用,Clojure中,小括号 () 表示函数调用,括号中的第一个值是函数名,剩下的值是参数,整个调用表达式被求值的结果作为调用的返回值。
在Clojure中,类似其它语言的运算符,都可以看做是函数,这也为何上面例子中的 (+ 1 2) 这个表达式中 + 号放在前面的原因。
二、常量
1、布尔: true false 注意是区分大小写的
2、字符串:同java一样,双引号扩起,就是 java.lang.String类型,如:
user=> (instance? java.lang.String "asd")
true
3、nil : 同 java中的null,python中的None。如果用在条件判断中,则为false
三、函数定义和调用
在Clojure中,通过defn 来定义函数,其实defn也是一个函数,只不过是Clojure中的内置函数罢了。
如:
(defn hello [a b] (+ a b))
上面代码定义了函数hello,有两个参数 a 和 b, 函数体是一个求两个参数和的语句,求和结果作为调用 hello函数的返回值。
函数体也可以有多个语句,最后一个语句的求值作为函数的返回值,如
user=> (defn hello [a b] (+ a b) (* a b)) //定义函数
user=> (hello 3 4) //调用函数
12
在java等语言中,调用函数的语法是:methodName(arg1, arg2, arg3);
在Clojure中,调用函数的方式是 :(function-name arg1 arg2 arg3)
说明:在cloure中,函数名习惯全部是小写字母,如果有多个单词,则单词之间以-连接,这点同java的习惯不同(java采用驼峰式的方式)。
四、Clojure代码的处理过程
分为三个阶段:
1、read阶段: 读取源代码,形成一个数据结构
2、compile阶段:上面的数据结构编程java字节码
3、run阶段:字节码被执行
五、与其它语言的差别
相比其它的语言,如c /c++ ,java, python等,Clojure语言有几个显著的特点和差异。
大量使用() 和 符号前置,如 (+ 2 3) //这让很多人不习惯
1、没有变量的概念
无法向其它语言一样,可以声明一个变量,然后后续使用这个变量
1、