相比我们传统的 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、

Clojure学习02:语法的更多相关文章

  1. JavaScript学习02 基础语法

    JavaScript学习02 基础语法 JavaScript中很多基础内容和Java中大体上基本一样,所以不需要再单独重复讲了,包括: 各种算术运算符.比较运算符.逻辑运算符: if else语句.s ...

  2. Java虚拟机JVM学习02 类的加载概述

    Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...

  3. Python学习02 列表 List

    Python学习02 列表 List Python列表 List Python中的列表(List)用逗号分隔,方括号包围(comma-separated values (items) between ...

  4. Android Testing学习02 HelloTesting 项目建立与执行

    Android Testing学习02 HelloTesting 项目建立与执行 Android测试,分为待测试的项目和测试项目,这两个项目会生成两个独立的apk,但是内部,它们会共享同一个进程. 下 ...

  5. ios -- 教你如何轻松学习Swift语法(一)

    目前随着公司开发模式的变更,swift也显得越发重要,相对来说,swift语言更加简洁,严谨.但对于我来说,感觉swift细节的处理很繁琐,可能是还没适应的缘故吧.基本每写一句代码,都要对变量的数据类 ...

  6. 程序员带你学习安卓开发,十天快速入-对比C#学习java语法

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  7. Java学习02

    Java学习02 1.导入内部的包 一.在包的下面加入下面一句话: import    java.util.Scanner; 二.在类中 Scanner input=new     Sanner(Sy ...

  8. ThinkPhp学习02

    原文:ThinkPhp学习02 一.什么是MVC                M -Model 编写model类 对数据进行操作 V -View  编写html文件,页面呈现 C -Controll ...

  9. JVM学习02:GC垃圾回收和内存分配

    JVM学习02:GC垃圾回收和内存分配 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. GC垃圾回收和内存分配知识要点Xmind梳理 案例分析1-(G ...

随机推荐

  1. .NET Core 安装

    Visual Studio 2015 和 .NET Core 安装 安装 Visual Studio 和 .NET Core 1.安装 Visual Studio Community 2015,选择 ...

  2. 安装 Rational Rose 启动报错:无法启动此程序,因为计算机中丢失 suite objects.dll

    安装完以后提示找不到 suite objects.dll: 经查找,该 dll 存在: 找不到的原因是,安装程序自动设置在 Path 中的环境变量有误: 把最后的 common 改成 Common: ...

  3. Python正则表达式一: 基本使用方法

    学习python的正则表达式,主要有两个方面学习: 第一,学习如何写正则表达式,主要是掌握其语法规范.正则表达式的语法规范是通用的,对各种开发语言都是一致的. 第二,学习如何使用正则表达式,也就是掌握 ...

  4. android项目 之 记事本(6)----- 加入手写

    想必大家都用过QQ的白板功能,里面主要有两项,一个是涂鸦功能,事实上类似于上节的画板功能,而还有一个就是手写,那记事本怎么能没有这个功能呢,今天就来为我们的记事本加入手写功能. 先上图,看看效果: 看 ...

  5. wpf全局异常

    在App.xaml文件中 添加DispatcherUnhandledExceptionEventArgs 新增对应事件

  6. Angular JS 学习笔记(二)

    1. AngularJS 是一个 JavaScript 框架.它可通过 <script> 标签添加到 HTML 页面.AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑定 ...

  7. springdata+redis配置详解

    springdata设计初衷是位简化数据类型和数据的持久化存储,它并不局限是关系型数据库还是nosql数据库,都提供了简化的数据库连接,让数据获取变得更加的简单.所有这些的实现有统一的api提供. 本 ...

  8. was服务器下修改jsp无效果

    使用了jsp静态导入,修改了导入的jsp页面,但是目标页面没出现效果.先说下静态导入和动态导入的区别: include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么J ...

  9. TF-IDF算法-自动提取关键词汇

    引子:Automatic Keyphrase extraction 很长文章里面,如何自动提取关键词汇呢? 比如在<中国的蜜蜂养殖>的长文里面,我们准备提取它的关键词.首先一个思路, 那些 ...

  10. pip install 出现报asciii码错误的解决

    原因是pip安装python包会加载我的用户目录,我的用户目录恰好是中文的,ascii不能编码.解决办法是: python目录 Python27\Lib\site-packages 建一个文件site ...