LISP - 數字
Common Lisp定義了幾種數字。數字數據類型包括由LISP支持各種數字。
通過LISP支持數類型是:
-
Integers
-
Ratios
-
Floating-yiibai numbers
-
Complex numbers
下圖顯示的數量和層次在LISP提供的各種數字數據類型:
在LISP各種數值類型
下表描述了LISP語言提供的各種數字類型的數據:
Data type | 描述 |
---|---|
fixnum | 這個數據類型表示的整數哪些不是太大,大多在範圍-215到215-1(它是依賴於機器) |
bignum | 這些都是非常大的數字有大小受限於內存中分配LISP量,它們不是長整數數字。 |
ratio | 表示兩個數中的分子/分母形式的比率。在/函數總是產生結果的比率,當其參數都是整數。 |
float | 它表示非整數。還有隨著精密四個浮點數據類型。 |
complex | 它表示複數,這是由#C表示。實部和虛部可以是兩者或者理性或浮點數。 |
示例
創建一個名為main.lisp一個新的源代碼文件,並在其中輸入如下代碼:
(write (/ 1 2)) (terpri) (write ( + (/ 1 2) (/ 3 4))) (terpri) (write ( + #c( 1 2) #c( 3 -4)))
當執行以上代碼,它返回以下結果:
1/2 5/4 #C(4 -2)
數字函數
下表描述了一些常用的數值函數:
Function | 描述 |
---|---|
+, -, *, / | 各算術運算 |
sin, cos, tan, acos, asin, atan | 相應的三角函數 |
sinh, cosh, tanh, acosh, asinh, atanh | 相應的雙曲函數 |
exp | 冪函數,計算 ex |
expt | 冪函數,需要基礎和冪兩者 |
sqrt | 它可以計算一個數的平方根 |
log | 對數函數。它的一個參數給出,則它計算其自然對數,否則將第二個參數被用作基數 |
conjugate | 它計算一個數的複共軛,如有任何實數,它返回數字本身 |
abs | 它返回一個數的絕對值(或幅度) |
gcd | 它可以計算給定數字的最大公約數 |
lcm | 它可以計算給定數的最小公倍數 |
isqrt | 它提供了最大的整數小於或等於一個給定的自然數的精確平方根。 |
floor, ceiling, truncate, round | 所有這些函數把一個數字的兩個參數,並返回商;地麵返回的最大整數不大於比,天花板選擇較小的整數,它比比率越大,截斷選擇相同符號的整數的比值與最大的絕對值是小於的比值的絕對值,與圓公司選用一個整數,它是最接近比值 |
ffloor, fceiling, ftruncate, fround | 確實與上述相同,但返回的商作為一個浮點數 |
mod, rem | 返回除法運算的餘數 |
float | 將實數轉換為浮點數 |
rational, rationalize | 將實數轉換為有理數 |
numerator, denominator | 返回有理數的各個部分 |
realpart, imagpart | 返回一個複數的實部和虛部 |
示例
創建一個名為main.lisp一個新的源代碼文件,並在其中輸入如下代碼:
(write (/ 45 78)) (terpri) (write (floor 45 78)) (terpri) (write (/ 3456 75)) (terpri) (write (floor 3456 75)) (terpri) (write (ceiling 3456 75)) (terpri) (write (truncate 3456 75)) (terpri) (write (round 3456 75)) (terpri) (write (ffloor 3456 75)) (terpri) (write (fceiling 3456 75)) (terpri) (write (ftruncate 3456 75)) (terpri) (write (fround 3456 75)) (terpri) (write (mod 3456 75)) (terpri) (setq c (complex 6 7)) (write c) (terpri) (write (complex 5 -9)) (terpri) (write (realpart c)) (terpri) (write (imagpart c))
當執行以上代碼,它返回以下結果:
15/26 0 1152/25 46 47 46 46 46.0 47.0 46.0 46.0 6 #C(6 7) #C(5 -9) 6 7