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、
Clojure学习02:语法的更多相关文章
- JavaScript学习02 基础语法
JavaScript学习02 基础语法 JavaScript中很多基础内容和Java中大体上基本一样,所以不需要再单独重复讲了,包括: 各种算术运算符.比较运算符.逻辑运算符: if else语句.s ...
- Java虚拟机JVM学习02 类的加载概述
Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...
- Python学习02 列表 List
Python学习02 列表 List Python列表 List Python中的列表(List)用逗号分隔,方括号包围(comma-separated values (items) between ...
- Android Testing学习02 HelloTesting 项目建立与执行
Android Testing学习02 HelloTesting 项目建立与执行 Android测试,分为待测试的项目和测试项目,这两个项目会生成两个独立的apk,但是内部,它们会共享同一个进程. 下 ...
- ios -- 教你如何轻松学习Swift语法(一)
目前随着公司开发模式的变更,swift也显得越发重要,相对来说,swift语言更加简洁,严谨.但对于我来说,感觉swift细节的处理很繁琐,可能是还没适应的缘故吧.基本每写一句代码,都要对变量的数据类 ...
- 程序员带你学习安卓开发,十天快速入-对比C#学习java语法
关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...
- Java学习02
Java学习02 1.导入内部的包 一.在包的下面加入下面一句话: import java.util.Scanner; 二.在类中 Scanner input=new Sanner(Sy ...
- ThinkPhp学习02
原文:ThinkPhp学习02 一.什么是MVC M -Model 编写model类 对数据进行操作 V -View 编写html文件,页面呈现 C -Controll ...
- JVM学习02:GC垃圾回收和内存分配
JVM学习02:GC垃圾回收和内存分配 写在前面:本系列分享主要参考资料是 周志明老师的<深入理解Java虚拟机>第二版. GC垃圾回收和内存分配知识要点Xmind梳理 案例分析1-(G ...
随机推荐
- JavaEE Tutorials (9) - 运行持久化示例
9.1order应用118 9.1.1order应用中的实体关系119 9.1.2order应用中的主键121 9.1.3实体映射到多个数据库表125 9.1.4order应用中的层叠操作125 9. ...
- Windows Azure 网站 (WAWS) 中的服务器端包含 (SSI)
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理Erez Benari 撰写. Windows Azure 网站客户普遍关心的一个问题是关于我们对服务器端包含(Server ...
- 【cocos2d-x】Win7下配置Cocos2d-x开发环境
一.下载安装包 先去Cocos2d-x官网下载安装包,最新版本为cocos2d-2.1.5 http://www.cocos2d-x.org/news/134 二.解压安装包 下载完成后,解压文件,解 ...
- HDU 1711 Number Sequence KMP
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1711 AC代码: #include <iostream> #include <cs ...
- 理解SQL SERVER中的分区表
转自:http://www.cnblogs.com/sienpower/archive/2011/12/31/2308741.html 简介 分区表是在SQL SERVER2005之后的版本引入的特性 ...
- Android中的一些基础知识(三)
最近在回顾Android的基础知识,就把一些常见的知识点整理一下,以后忘了也可以翻出来看一看. 在TextView中显示图像(使用< img>标签) 在TextView中显示图片的方法有许 ...
- Java 使用Dom4j和JFileChooser实现xml文件的自主选择路径导出
直接来个简单的例子,大家一看便知. Document doc=DocumentHelper.createDocument();//创建document Element rootElement=doc. ...
- Eclipse之报错信息及其解决方案
一.有很多人都喜欢开发js的时候用aptana,因此在eclipse中集成aptana插件是必须的,可是,在用link方式在eclipse中安装好aptana后,启动时会报如下错误 An intern ...
- vs 2010 引用DLL 遇到问题
1.新建项目→添加引用,提示:未能添加对dll的引用,请确保此文件可访问并且是一个有效的程序集或COM组件 解决方案:首先把DLL放system32中,然后,regsvr32 绝对路径注册一下: 如果 ...
- mongoDB用java实现增删改查
package mongo; import java.net.UnknownHostException; import com.mongodb.BasicDBObject; import com.mo ...