clojure-基本语法-数字类型

一、算术运算  
加法+:  
加法函数(+)接受任意数值类型的参数,返回它们的和;没有参数时返回0。 
Java代码   收藏代码
  1. user=> (+)  
  2. 0  
  3. user=> (+ 1)  
  4. 1  
  5. user=> (+ 1 2 3 4)  
  6. 10  


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


乘法*:  
乘法函数 (*) 接受任意数值类型的参数并返回它们的乘积,如果只有一个参数,返回1。 
Java代码   收藏代码
  1. user=> (*)  
  2. 1  
  3. user=> (* 1)  
  4. 1  
  5. user=> (* 1 2 3)  
  6. 6  
  7. user=> (* 0 1 2 3)  
  8. 0  


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


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

注意:商函数quot与/函数不是等价的 
Java代码   收藏代码
  1. user=> (= (/ 4 2) (quot 4 2))  
  2. true  
  3. user=> (= (/ 3 2) (quot 3 2))  
  4. false  


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


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

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


增量函数inc:  
函数 (inc) 接受一个数值类型参数并返回它的值加1。 
Java代码   收藏代码
  1. user=> (inc 1)  
  2. 2  
  3. user=> (inc -1)  
  4. 0  


减量函数 (dec):  
减量函数 (dec) 接受一个数值类型参数并返回它的值减1。 
Java代码   收藏代码
  1. user=> (dec 1)  
  2. 0  
  3. user=> (dec -1)  
  4. -2  


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


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


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


二、比较运算:  
值相等=:  
值相等(=)函数接受若干参数,比较若干参数值是否相等。一个参数时,返回true。参数可以为nil。与java中的equals一致。 
Java代码   收藏代码
  1. user=> (= 1)  
  2. true  
  3. user=> (= 1 1)  
  4. true  
  5. user=> (= 1 1.0)  
  6. false  
  7. user=> (= 1 2)  
  8. false  
  9. user=> (= 1 1 1)  
  10. true  
  11. user=> (= 1 1 2)  
  12. false  
  13. user=> (= nil nil)  
  14. true  


等价值==:  
等价值函数接受若干参数,比较若干参数值是否等价。一个参数时,返回true。参数可以为nil、keyword等 
Java代码   收藏代码
  1. user=> (== 1 1.0)  
  2. true  
  3. user=> (== :foo)  
  4. true  
  5. user=> (== nil)  
  6. true  


值不同函数not=:  
等价于(not (= obj1 obj2)) 
Java代码   收藏代码
  1. user=> (not= 1 1)  
  2. false  
  3. user=> (not= 1 2)  
  4. true  
  5. user=> (not= 1 1.0)  
  6. true  
  7. user=> (not= true true)  
  8. false  
  9. user=> (not= true false)  
  10. true  
  11. user=> (not= true true false)  
  12. true  


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


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


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


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


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


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


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


偶数检查even?:  
Java代码   收藏代码
  1. user=> (even? 10)  
  2. true  
  3. user=> (even? 3)  
  4. false  


奇数检查odd?:  
Java代码   收藏代码
  1. user=> (odd? 10)  
  2. false  
  3. user=> (odd? 3)  
  4. true  


数值检查number?:  
数值检查函数 (number?) 接受一个参数,如果是数值返回true,否则返回false 
Java代码   收藏代码
  1. user=> (number? 3.2)  
  2. true  
  3. user=> (number? "2")  
  4. false  


四、强制转换:  
强制转换支持以下类型: 
Java代码   收藏代码
  1. byte  Coerce to byte.   
  2. short  Coerce to short.   
  3. int  Coerce to int.   
  4. long  Coerce to long.   
  5. float  Coerce to float.   
  6. double  Coerce to double.   
  7. bigint  Coerce to BigInteger.   
  8. bigdec  Coerce to BigDecimal.   
  9. num  Coerce to Number.   
  10. rationalize  returns the rational value of num   

Java代码   收藏代码
  1. user=> (double 12)  
  2. 12.0  
  3. user=> (short 10000)  
  4. 10000  
  5. user=> (short 22.2)  
  6. 22  
  7. user=> (int 22.2)  
  8. 22  
  9. user=> (long 22.2)  
  10. 22  
  11. user=> (float 100)  
  12. 100.0  
  13. user=> (bigint 1000000000)  
  14. 1000000000N  
  15. user=> (bigdec 100000)  
  16. 100000M  
  17. user=> (num 1.11)  
  18. 1.11  
  19. user=> (rationalize 0.5)  
  20. 1/2  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值