`
Dead_knight
  • 浏览: 1201071 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
752c8642-b795-3fe6-946e-a4e845bffdec
Spring Securi...
浏览量:240232
33caa84e-18a6-3036-a82b-6e2106a4de63
clojure专题
浏览量:48939
E17ca077-44df-3816-a3fe-471c43f6e1e5
WebLogic11g
浏览量:236878
社区版块
存档分类
最新评论

clojure-基本语法-数字类型

阅读更多
一、算术运算
加法+:
加法函数(+)接受任意数值类型的参数,返回它们的和;没有参数时返回0。
user=> (+)
0
user=> (+ 1)
1
user=> (+ 1 2 3 4)
10


减法-:
减法函数(-)接受任意数值类型的参数。如果只有一个参数,则返回它相反的数。当有多个参数时,返回第一个参数减去后面所有参数的结果。
user=> (- 1)
-1
user=> (- 10 2)
8
user=> (- 10 2 3 4)
1


乘法*:
乘法函数 (*) 接受任意数值类型的参数并返回它们的乘积,如果只有一个参数,返回1。
user=> (*)
1
user=> (* 1)
1
user=> (* 1 2 3)
6
user=> (* 0 1 2 3)
0


除法/:
除法函数 (/) 接受任意数值类型的参数。第一个参数是分子,其他任意参数是分母。如果没有分母,则函数返回 1 / 分子,否则返回分子除以分母。
user=> (/ 2)
1/2
user=> (/ 2 10)
1/5
user=> (/ 1 2 4 6)
1/48


商quot:
商函数 (quot) 接受两个数值类型参数并返回第一个参数除以第二个参数的整数商。
user=> (quot 10 3)
3
user=> (quot 11 3)
3
user=> (quot 12 3)
4
user=> (quot -5.9 3)
-1.0
user=> (quot 10 -3)
-3
user=> (quot 15 0)
ArithmeticException / by zero  clojure.lang.Numbers.quotient (Numbers.java:1764)

注意:商函数quot与/函数不是等价的
user=> (= (/ 4 2) (quot 4 2))
true
user=> (= (/ 3 2) (quot 3 2))
false


取余rem:
余数函数 (rem) 接受两个数值类型参数并返回第一个参数除以第二个参数的余数。
user=> (rem 10 9)
1
user=> (rem 2 2)
0
user=> (rem 10 -3)
1


取模mod:
取模函数(mod)接收两个数值类型参数,如果两个参数为正整数或者同为负整数,则与rem函数返回值一致;如果其中有一个负数,则结果为rem返回值与第二个参数之和。比较绕口……
user=> (mod 10 9)
1
user=> (mod 2 2)
0
user=> (mod 10 -3)
-2

(rem 10 -3)和(mod 10 -3)结果不一致,分别为1,-2。-2是如何得到的?由于(rem 10 -3)的返回值为1,那么(mod 10 -3)的返回值为(+ 1 (rem 10 -3))=-2
贴上mod函数源码,仅供参考。
(defn mod
  "Modulus of num and div. Truncates toward negative infinity."
  {:added "1.0"
   :static true}
  [num div] 
  (let [m (rem num div)] 
    (if (or (zero? m) (= (pos? num) (pos? div)))
      m 
      (+ m div))))


增量函数inc:
函数 (inc) 接受一个数值类型参数并返回它的值加1。
user=> (inc 1)
2
user=> (inc -1)
0


减量函数 (dec):
减量函数 (dec) 接受一个数值类型参数并返回它的值减1。
user=> (dec 1)
0
user=> (dec -1)
-2


最大函数max:
最大数函数 (max) 接受任意数值类型的参数并返回最大的。
user=> (max 5 -1 2 3)
5


最小函数min:
最小数函数 (min) 接受任意数值类型的参数并返回最小的。
user=> (min 5 -1 2 3.9)
-1


精度函数with-precision:
精度函数with-precision针对大数据值操作的精度、小数点运算函数。
user=> (with-precision 10 (/ 1M 3))
0.3333333333M
user=> (with-precision 2 (/ 100M 3))
33M
user=> (with-precision 4 (/ 100M 3))
33.33M


二、比较运算:
值相等=:
值相等(=)函数接受若干参数,比较若干参数值是否相等。一个参数时,返回true。参数可以为nil。与java中的equals一致。
user=> (= 1)
true
user=> (= 1 1)
true
user=> (= 1 1.0)
false
user=> (= 1 2)
false
user=> (= 1 1 1)
true
user=> (= 1 1 2)
false
user=> (= nil nil)
true


等价值==:
等价值函数接受若干参数,比较若干参数值是否等价。一个参数时,返回true。参数可以为nil、keyword等
user=> (== 1 1.0)
true
user=> (== :foo)
true
user=> (== nil)
true


值不同函数not=:
等价于(not (= obj1 obj2))
user=> (not= 1 1)
false
user=> (not= 1 2)
true
user=> (not= 1 1.0)
true
user=> (not= true true)
false
user=> (not= true false)
true
user=> (not= true true false)
true


小于 (<)
小于函数 (<) 接受任意数值类型的参数,如果它们按升序排列返回true,否则返回false。
user=> (< 5 10)
true
user=> (< 5 10 9)
false
user=> (< 1)
true


大于 (>)
大于函数 (>) 接受任意数值类型的参数,如果它们按降序排列返回true,否则返回false。
user=> (> 5 2)
true
user=> (> 5 10 9)
false
user=> (> 1)
true


大于等于 (>=)
大于等于函数 (>=) 接受任意数值类型的参数,如果它们按降序排列或顺序相等返回true,否则返回false。
user=> (>= 10 5 5)
true


小于等于 (<=)
小于等于函数 (<=) 接受任意数值类型的参数,如果它们按升序排列或顺序相等返回true,否则返回false。
user=> (<= 2 5 5)
true


三、验证函数:
0检查zero?:
0检查函数 (zero?) 接受一个数值类型参数,如果是0返回true,否则返回false
user=> (zero? 0.0)
true


正数检查pos?:
正数检查函数 (pos?) 接受一个数值类型参数,如果是大于0返回true,否则返回false
user=> (pos? -2)
false
user=> (pos? 1.2)
true


负数检查neg?:
负数检查函数 (neg?) 接受一个数值类型参数,如果是小于0返回true,否则返回false
user=> (neg? -3)
true
user=> (neg? 0)
false


偶数检查even?:
user=> (even? 10)
true
user=> (even? 3)
false


奇数检查odd?:
user=> (odd? 10)
false
user=> (odd? 3)
true


数值检查number?:
数值检查函数 (number?) 接受一个参数,如果是数值返回true,否则返回false
user=> (number? 3.2)
true
user=> (number? "2")
false


四、强制转换:
强制转换支持以下类型:
byte  Coerce to byte. 
short  Coerce to short. 
int  Coerce to int. 
long  Coerce to long. 
float  Coerce to float. 
double  Coerce to double. 
bigint  Coerce to BigInteger. 
bigdec  Coerce to BigDecimal. 
num  Coerce to Number. 
rationalize  returns the rational value of num 

user=> (double 12)
12.0
user=> (short 10000)
10000
user=> (short 22.2)
22
user=> (int 22.2)
22
user=> (long 22.2)
22
user=> (float 100)
100.0
user=> (bigint 1000000000)
1000000000N
user=> (bigdec 100000)
100000M
user=> (num 1.11)
1.11
user=> (rationalize 0.5)
1/2
分享到:
评论

相关推荐

    clojure-rust:Clojure转换为Rust编译器

    1. **词法分析**:首先,编译器会读取Clojure源代码,进行词法分析,识别出符号、数字、字符串、注释等基本元素。 2. **语法解析**:接着,编译器进行语法解析,将词法单元转化为抽象语法树(AST),这一步是语言...

    clojure-by-example:针对Clojure的程序员的研讨会

    1. **基础语法**:介绍Clojure的基本语法,如S表达式、符号、数字、字符串、布尔值等,并演示如何在Clojure中读写这些基本类型。 2. **函数与高阶函数**:Clojure的函数是第一类公民,可以作为参数传递,也可以作为...

    clojure cheatsheet-usletter-color.pdf

    通过以上解析可以看出,Clojure Cheat Sheet覆盖了Clojure语言的基本语法、内置函数、宏以及其他常用的功能,这对于初学者来说是一个非常有用的资源。它不仅帮助用户快速掌握Clojure的核心概念,还提供了实际编程中...

    Clojure学习教程.pdf

    Clojure拥有一系列的基本数据类型,包括数字(整数、浮点数)、字符、字符串、关键字(keywords)、符号(symbols)和列表(lists)。在提供的文档片段中,可以看到使用了str函数来合并字符串,例如 `(str "Hello" ...

    sicp-clojure:在 Clojure 中解决的 SICP 练习

    1. **基础概念**:Clojure 采用 Lisp 的 S-表达式(S-expressions)作为其基本语法,这使得代码看起来更像数学公式,便于阅读和理解。在 sicp-clojure 中,你会看到如何使用 Clojure 的基本数据类型,如符号...

    Clojure Handbook (by jamesqiu).pdf

    2.4 基本类型:Clojure提供了丰富的基本数据类型,如数字、字符串、布尔值等。 2.5 类型判断:Clojure允许程序员通过一些内置函数来判断值的类型。 2.6 执行多条语句:使用do函数可以在一个表达式中顺序执行多条...

    代码的出现

    首先,让我们了解Clojure的基本概念。Clojure是由Rich Hickey设计的,于2007年发布,其目标是提供一个并发、多线程的编程环境,并且具有强静态类型系统的优点,但又不失动态语言的灵活性。Clojure运行在Java虚拟机...

    clyaksa:Clojure库,用于像素艺术和简单的图像处理

    Clojure是一种功能丰富的、静态类型的编程语言,它运行在Java虚拟机(JVM)上,因此clyaksa能够利用JVM的强大性能和丰富的生态系统。像素艺术是一种复古风格的数字艺术形式,它通常具有低分辨率和有限的颜色调色板,...

    lisp语言编程成果集

    3. **动态类型系统**:LISP没有预定义的数据类型,所有值都是对象,类型在运行时确定,提供了高度的灵活性。 4. **自动内存管理**:LISP通常采用垃圾回收机制,程序员无需关心内存分配和释放,降低了编程复杂性。 ...

    收集整理超级有用的83个lisp源码.rar

    1. **LISP基本结构**:LISP代码主要由S-表达式(S-expressions)构成,它们可以是原子(如数字、符号或字符串)或列表(其他S-表达式的组合)。这种结构使得LISP代码易于解析和理解。 2. **函数定义**:LISP中的...

    redscale:用于 JavaScriptClojureScript 的 BigInteger、BigDecimal 和 Ratio 库

    这使得Clojure开发者能够在前端项目中利用Clojure的强大语法和函数式编程特性,同时享受到红鳞提供的大数和高精度计算能力。 **应用场景** - **加密算法**:BigInteger可用于公钥加密算法,如RSA,需要处理大整数。...

Global site tag (gtag.js) - Google Analytics