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