LISP - ตัวเลข

Common Lisp กำหนดตัวเลขหลายชนิด number ประเภทข้อมูลประกอบด้วยตัวเลขหลายประเภทที่ LISP สนับสนุน

ประเภทตัวเลขที่ LISP รองรับ ได้แก่ -

  • Integers
  • Ratios
  • ตัวเลขทศนิยม
  • จำนวนเชิงซ้อน

แผนภาพต่อไปนี้แสดงลำดับชั้นของตัวเลขและประเภทข้อมูลตัวเลขต่างๆที่มีอยู่ใน LISP -

ประเภทตัวเลขต่างๆใน LISP

ตารางต่อไปนี้อธิบายข้อมูลประเภทตัวเลขต่างๆที่มีอยู่ใน LISP -

ซีเนียร์ ประเภทข้อมูลและคำอธิบาย
1

fixnum

ชนิดข้อมูลนี้แสดงจำนวนเต็มซึ่งไม่ใหญ่เกินไปและส่วนใหญ่อยู่ในช่วง -215 ถึง 215-1 (ขึ้นอยู่กับเครื่อง)

2

bignum

ตัวเลขเหล่านี้มีขนาดใหญ่มากโดยมีขนาด จำกัด ด้วยจำนวนหน่วยความจำที่จัดสรรสำหรับ LISP ซึ่งไม่ใช่ตัวเลข Fixnum

3

ratio

แสดงอัตราส่วนของตัวเลขสองตัวในรูปตัวเศษ / ตัวส่วน ฟังก์ชัน / จะสร้างผลลัพธ์เป็นอัตราส่วนเสมอเมื่ออาร์กิวเมนต์เป็นจำนวนเต็ม

4

float

แสดงถึงตัวเลขที่ไม่ใช่จำนวนเต็ม มีข้อมูลโฟลทสี่ประเภทที่เพิ่มความแม่นยำ

5

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)

ฟังก์ชันตัวเลข

ตารางต่อไปนี้อธิบายฟังก์ชันตัวเลขที่ใช้กันทั่วไป -

ซีเนียร์ ฟังก์ชั่นและคำอธิบาย
1

+, -, *, /

การคำนวณตามลำดับ

2

sin, cos, tan, acos, asin, atan

ฟังก์ชันตรีโกณมิติตามลำดับ

3

sinh, cosh, tanh, acosh, asinh, atanh

ฟังก์ชันไฮเพอร์โบลิกตามลำดับ

4

exp

ฟังก์ชันเลขชี้กำลัง คำนวณ e x

5

expt

ฟังก์ชันเลขชี้กำลังใช้ฐานและกำลังทั้งคู่

6

sqrt

จะคำนวณรากที่สองของตัวเลข

7

log

ฟังก์ชันลอการิทึม ได้รับพารามิเตอร์หนึ่งพารามิเตอร์จากนั้นจะคำนวณลอการิทึมตามธรรมชาติมิฉะนั้นจะใช้พารามิเตอร์ที่สองเป็นฐาน

8

conjugate

คำนวณคอนจูเกตที่ซับซ้อนของตัวเลข ในกรณีที่เป็นจำนวนจริงจะส่งกลับตัวเลขนั้นเอง

9

abs

จะส่งคืนค่าสัมบูรณ์ (หรือขนาด) ของตัวเลข

10

gcd

จะคำนวณตัวหารร่วมที่ยิ่งใหญ่ที่สุดของตัวเลขที่กำหนด

11

lcm

จะคำนวณตัวคูณที่พบบ่อยน้อยที่สุดของตัวเลขที่กำหนด

12

isqrt

ให้จำนวนเต็มที่มากที่สุดน้อยกว่าหรือเท่ากับรากที่สองที่แน่นอนของจำนวนธรรมชาติที่กำหนด

13

floor, ceiling, truncate, round

ฟังก์ชันทั้งหมดนี้ใช้อาร์กิวเมนต์สองตัวเป็นตัวเลขและส่งกลับผลหาร floor ส่งคืนจำนวนเต็มที่มากที่สุดที่ไม่เกินอัตราส่วน ceiling เลือกจำนวนเต็มขนาดเล็กที่มากกว่าอัตราส่วน truncate เลือกจำนวนเต็มของเครื่องหมายเดียวกับอัตราส่วนที่มีค่าสัมบูรณ์มากที่สุดที่น้อยกว่าค่าสัมบูรณ์ของอัตราส่วนและ round เลือกจำนวนเต็มที่ใกล้เคียงกับอัตราส่วนมากที่สุด

14

ffloor, fceiling, ftruncate, fround

ทำเช่นเดียวกับด้านบน แต่ส่งกลับผลหารเป็นตัวเลขทศนิยม

15

mod, rem

ส่งคืนส่วนที่เหลือในการดำเนินการหาร

16

float

แปลงจำนวนจริงเป็นจำนวนทศนิยม

17

rational, rationalize

แปลงจำนวนจริงเป็นจำนวนตรรกยะ

18

numerator, denominator

ส่งคืนส่วนต่างๆของจำนวนตรรกยะ

19

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