Clojure学习02:语法

相比咱们传统的 c ,java ,python ,javascript等,Clojure的语法比较特别,初一看,还可能会有些不适应。javascript

本文来介绍下Clojure的语法特色。java

1、表达式python

全部的Clojure代码都是由表达式组成的,每一个表达式都会产生一个值。c++

常见的表达式如:编程

 60数据结构

[2  4  6]函数

(+ 1 2)ip

(average [2 3 4])字符串

1)上面的第一个表达式就是一个字面常量,这里是一个整数。io

2)第二个是个整数序列。

3)第3和4 都是函数调用,Clojure中,小括号 () 表示函数调用,括号中的第一个值是函数名,剩下的值是参数,整个调用表达式被求值的结果做为调用的返回值。

在Clojure中,相似其它语言的运算符,均可以看作是函数,这也为什么上面例子中的 (+ 1 2) 这个表达式中 + 号放在前面的缘由。

 

2、常量

一、布尔:  true  false  注意是区分大小写的

二、字符串:同java同样,双引号扩起,就是 java.lang.String类型,如:

user=> (instance? java.lang.String "asd")
true

三、nil :  同 java中的null,python中的None。若是用在条件判断中,则为false

 

3、函数定义和调用

在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采用驼峰式的方式)。

 

4、Clojure代码的处理过程

分为三个阶段:

一、read阶段: 读取源代码,造成一个数据结构

二、compile阶段:上面的数据结构编程java字节码

三、run阶段:字节码被执行

 

5、与其它语言的差异

相比其它的语言,如c /c++ ,java, python等,Clojure语言有几个显著的特色和差别。

大量使用()  和  符号前置,如  (+ 2 3)  //这让不少人不习惯

一、没有变量的概念

没法向其它语言同样,能够声明一个变量,而后后续使用这个变量

 

 

 

一、

相关文章
相关标签/搜索