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

  • ฟังก์ชั่นการทำแผนที่