文档章节

clojure 新手指南(5):判断&基本类型

凯奥斯
 凯奥斯
发布于 2013/07/03 23:37
字数 791
阅读 1436
收藏 3

判断语句

在Clojure中,所有的语法规则最终都是S表达式。我们如何知道哪些是判断语句呢?这个很简单,clojure中(lisp习惯)有个规定:对于判断功能的函数,函数名后面都有一个“?”号。所以我们只要看到后面带问号的函数名,就知道这一定是一个判断语句。很简单吧!

例如 "fn?"这个函数用于判断传入的参数是否是一个函数:

=>(fn? reduce)
true
=>(fn? 42)
false


基本类型


数字(Number)

Clojure支持非常丰富的数字类型的数据。每一种数字类型都提供了不同的计算精度,当然也占用不同的内存空间。当我们选择不同的数据类型时,精度、内存消耗这些因素对计算的性能和准确度有着至关重要的影响。所以我们必须对不同的数据类型有着深入的了解。

=>42
42

;;整形
=>(class 42)
java.lang.Integer

;;判断是否是数字
=>(number? 42)
true

;;判断是否是整形
=>(integer? 42)
true

=>21.42
21.42

;;查看类型
=>(class 21.42)
java.lang.Double

;;判断是否是数字
=>(number? 21.42)
true

;;判断是否是整形
=>(integer? 21.42)
false


整形和浮点型在其他语言中都是常见的数据类型。但是分数(ratios)这种就非常少见了。在Clojure中,你可以将二分之一写成1/2,当然也可以用0.5。

=>1/2
1/2

=>(class 1/2)
clojure.lang.Ratio

=>(ratio? 1/2)
true

=>(* 1/2 1.0)
0.5
使用ratios类型的好处:

在进行数据计算时,特别是使用大量的除法时,我们可以使用分数形式。等到得到最终的结果后,我们在对分数求值。这样最大的减少精度损失。(一旦遇到无法整除的除法运算都很可能减少精度)。


字符(Character)

字符代表一个字母、一个数字、一个标点符号或者其他符号。在Clojure中,符号使用反斜杠“\”作为开始。

=>\C
 \C

=>(class \C)
java.lang.Character

=>(char? \C)
true


字符串 (String)

字符组成一起就是字符串。字符串使用双引号括起来(这招很通用)。

=>"some characters in a string"
"some characters in a string"

=>(class "some characters in a string")
java.lang.String

=>(string? "some characters in a string")
true

=>(str \C)
"C"


符号(Symbol)

符号被作为一种标示符。为了常用目的经常绑定到数据或者函数上。符号之前说过了,用单引号" ' "开头,或者使用quote函数。

=>'stuff
stuff

=> (quote stuff)
stuff

=>(class 'stuff)
clojure.lang.Symbol

=>(symbol? 'stuff)
true
符号也可通过字符串来创建:
=>(symbol "more stuff")
more stuff

=>(class (symbol "more stuff"))
clojure.lang.Symbol


关键字(Keyword)

关键字是另一种类型的符号,它不适用于数据绑定的。关键字主要用于匹配。例如在哈希表中作为key,它比使用字符串作为key检索起来要快的多。关键字以冒号”:“开头。

=>:stuff
:stuff

=>(class :stuff)
clojure.lang.Keyword =>(keyword? :stuff)
true
关键字也可以通过字符串来创建:
=>(keyword "stuff")
:stuff

=>(class (keyword "stuff"))
clojure.lang.Keyword


布尔值(Boolean)

这个太直观了。就俩值:true 和 false

=>true
true

=>false
false

=>(class true)
java.lang.Boolean

=>(class false)
java.lang.Boolean

© 著作权归作者所有

凯奥斯
粉丝 44
博文 51
码字总数 41388
作品 0
朝阳
程序员
私信 提问
加载中

评论(1)

random_walk
random_walk
问号结尾的返回Boolean值,这一点和ruby一样
clojure 新手指南(9):元数据

我们在定义函数的时候提到了如何去定义一个元数据。但之前只是定义它,并没有明说它的用途。让我们再看一下之前定义的select-random函数,我们添加了一个叫做:add的元数据。注意:元数据是以...

凯奥斯
2013/07/07
582
0
clojure 新手指南(10):与java交互

clojure是基于jvm的语言,就是说clojure会被编译成字节码被jvm执行。但是clojure能做的可不仅仅是被编译成字节码,它提供了一套API让用户与java交互。因此clojure可以直接调用java世界中那些...

凯奥斯
2013/07/07
2.6K
1
clojure 新手指南(2)使用REPL求值

Clojure 拥有动态语言的所有好处。这意味着你可以在程序被加载后依然可以改变它,并且不用采取额外的步骤去编译代码。你既不用停止也不用重启正在运行的应用就可以让修改生效。这对于其他语言...

凯奥斯
2013/07/03
741
0
clojure 新手指南(13):序列&向量

序列 我们知道clojure是Lisp的一种方言,那么这也意味着对这门语言必然植根于“列表解析”。但是在Clojure中,我们优先使用"序列"来创造列表和管理列表中的元素。 列表 之前我们说过,Lisp系...

凯奥斯
2013/07/13
695
0
clojure 新手指南(1)设置&安装

这篇设置指南的目标读者是那些没有或者很少编程经验的人。内容包括如何访问windows 命令行接口,如何确定java是否被正确安装,如何在REPL上运行clojure。 步骤一:使用命令行接口 所有的操作...

凯奥斯
2013/07/02
3.1K
1

没有更多内容

加载失败,请刷新页面

加载更多

带你了解 Java内存模型

Java内存模型的规定: 1、所有变量存储在主内存中; 2、每个线程都有自己的工作内存,且对变量的操作都是在工作内存中进行; 3、不同线程之间无法直接访问彼此工作内存中的变量,要想访问只能...

linux-tao
27分钟前
4
0
.net c# datetime转string 时间转字符串

.net c# datetime转string 时间转字符串 .net c# datetime转string 时间转字符串 刚开始接触net 时间转换字符串 一搜索出来的全是 字符串转时间,要么就是系统当前时间转字符串 就没有一个指...

青峰Jun19er
28分钟前
4
0
hbase demo

HbaseDao public class HbaseDao {@Testpublic void insertTest() throws Exception {Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.qu......

Garphy
38分钟前
3
0
IT兄弟连 HTML5教程 HTML5表单 多样的输入类型2

4 range range类型用于包含一定范围内数字值的输入域,跟number一样,我们还可以对数值设置限定,range类型显示为滑动条用法如下: 上述代码使用了range类型输入框,为该类型设置了数值范围为...

老码农的一亩三分地
38分钟前
3
0
对比不同的数据库连接的异同

博主在学习和使用数据库连接时,遇到的问题, 这个几个数据库连接究竟有什么不同? 到底什么时候该使用哪个会更好一点? 带着这个问题我们先去了解常见的数据库连接 1. 常见的数据库连接有哪些?...

理性思考
40分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部