LISP - Chức năng

Hàm là một nhóm các câu lệnh cùng thực hiện một tác vụ.

Bạn có thể chia mã của mình thành các chức năng riêng biệt. Cách bạn phân chia mã của mình giữa các chức năng khác nhau là tùy thuộc vào bạn, nhưng về mặt logic, việc phân chia thường là do mỗi chức năng thực hiện một nhiệm vụ cụ thể.

Xác định các chức năng trong LISP

Macro có tên defunđược sử dụng để xác định các chức năng. Cácdefun macro cần ba đối số -

  • Tên của hàm
  • Các thông số của hàm
  • Nội dung của hàm

Cú pháp để khử nghĩa là -

(defun name (parameter-list) "Optional documentation string." body)

Hãy để chúng tôi minh họa khái niệm bằng các ví dụ đơn giản.

ví dụ 1

Hãy viết một hàm có tên là Averagegenum sẽ in ra giá trị trung bình của bốn số. Chúng tôi sẽ gửi những con số này dưới dạng tham số.

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

(defun averagenum (n1 n2 n3 n4)
   (/ ( + n1 n2 n3 n4) 4)
)
(write(averagenum 10 20 30 40))

Khi bạn thực thi mã, nó trả về kết quả sau:

25

Ví dụ 2

Hãy định nghĩa và gọi một hàm tính diện tích của một hình tròn khi bán kính của hình tròn được cho làm đối số.

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

(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)

Khi bạn thực thi mã, nó trả về kết quả sau:

Radius:  10.0
Area:   314.1592

Xin lưu ý rằng -

  • Bạn có thể cung cấp danh sách trống dưới dạng tham số, có nghĩa là hàm không nhận đối số, danh sách trống, được viết dưới dạng ().

  • LISP cũng cho phép các đối số tùy chọn, nhiều và từ khóa.

  • Chuỗi tài liệu mô tả mục đích của hàm. Nó được liên kết với tên của hàm và có thể được lấy bằng cách sử dụngdocumentation chức năng.

  • Phần thân của hàm có thể chứa bất kỳ số biểu thức Lisp nào.

  • Giá trị của biểu thức cuối cùng trong phần thân được trả về dưới dạng giá trị của hàm.

  • Bạn cũng có thể trả về một giá trị từ hàm bằng cách sử dụng return-from toán tử đặc biệt.

Hãy để chúng tôi thảo luận ngắn gọn về các khái niệm trên. Nhấp vào các liên kết sau để tìm chi tiết -

  • Các thông số tùy chọn

  • Tham số còn lại

  • Tham số Từ khoá

  • Trả lại giá trị từ một hàm

  • Các hàm Lambda

  • Lập bản đồ chức năng