LISP - ฟังก์ชั่น
ฟังก์ชันคือกลุ่มของคำสั่งที่ทำงานร่วมกัน
คุณสามารถแบ่งรหัสของคุณออกเป็นฟังก์ชันแยกกันได้ การแบ่งรหัสของคุณระหว่างฟังก์ชันต่างๆนั้นขึ้นอยู่กับคุณ แต่ในทางตรรกะแล้วการหารมักจะเป็นดังนั้นแต่ละฟังก์ชันจึงทำงานเฉพาะ
การกำหนดฟังก์ชันใน LISP
มาโครชื่อ defunใช้สำหรับกำหนดฟังก์ชัน defun มาโครต้องการสามอาร์กิวเมนต์ -
- ชื่อของฟังก์ชัน
- พารามิเตอร์ของฟังก์ชัน
- ตัวของฟังก์ชั่น
ไวยากรณ์สำหรับ defun คือ -
(defun name (parameter-list) "Optional documentation string." body)
ให้เราแสดงแนวคิดด้วยตัวอย่างง่ายๆ
ตัวอย่าง 1
ลองเขียนฟังก์ชันชื่อaveragenumซึ่งจะพิมพ์ค่าเฉลี่ยของตัวเลขสี่ตัว เราจะส่งตัวเลขเหล่านี้เป็นพารามิเตอร์
สร้างไฟล์ซอร์สโค้ดใหม่ชื่อ main.lisp และพิมพ์รหัสต่อไปนี้
(defun averagenum (n1 n2 n3 n4)
(/ ( + n1 n2 n3 n4) 4)
)
(write(averagenum 10 20 30 40))
เมื่อคุณรันโค้ดจะส่งคืนผลลัพธ์ต่อไปนี้ -
25
ตัวอย่าง 2
มากำหนดและเรียกใช้ฟังก์ชันที่จะคำนวณพื้นที่ของวงกลมเมื่อกำหนดรัศมีของวงกลมเป็นอาร์กิวเมนต์
สร้างไฟล์ซอร์สโค้ดใหม่ชื่อ main.lisp และพิมพ์รหัสต่อไปนี้
(defun area-circle(rad)
"Calculates area of a circle with given radius"
(terpri)
(format t "Radius: ~5f" rad)
(format t "~%Area: ~10f" (* 3.141592 rad rad))
)
(area-circle 10)
เมื่อคุณรันโค้ดจะส่งคืนผลลัพธ์ต่อไปนี้ -
Radius: 10.0
Area: 314.1592
โปรดทราบว่า -
คุณสามารถระบุรายการว่างเป็นพารามิเตอร์ซึ่งหมายความว่าฟังก์ชันจะไม่มีอาร์กิวเมนต์รายการว่างเขียนเป็น ()
LISP ยังอนุญาตอาร์กิวเมนต์ที่เป็นทางเลือกหลายและคำหลัก
สตริงเอกสารอธิบายวัตถุประสงค์ของฟังก์ชัน มีความเกี่ยวข้องกับชื่อของฟังก์ชันและสามารถรับได้โดยใช้documentation ฟังก์ชัน
เนื้อหาของฟังก์ชันอาจประกอบด้วยนิพจน์ Lisp จำนวนเท่าใดก็ได้
ค่าของนิพจน์สุดท้ายในเนื้อหาจะถูกส่งกลับเป็นค่าของฟังก์ชัน
คุณยังสามารถคืนค่าจากฟังก์ชันโดยใช้ return-from ตัวดำเนินการพิเศษ
ให้เราพูดคุยเกี่ยวกับแนวคิดข้างต้นโดยสังเขป คลิกลิงก์ต่อไปนี้เพื่อดูรายละเอียด -
พารามิเตอร์เสริม
พารามิเตอร์ที่เหลือ
พารามิเตอร์คำหลัก
การคืนค่าจากฟังก์ชัน
ฟังก์ชั่น Lambda
ฟังก์ชั่นการทำแผนที่