LISP - Funkcje

Funkcja to grupa instrukcji, które razem wykonują zadanie.

Możesz podzielić swój kod na osobne funkcje. To, w jaki sposób podzielisz swój kod na różne funkcje, zależy od Ciebie, ale logicznie jest to zazwyczaj taki podział, że każda funkcja wykonuje określone zadanie.

Definiowanie funkcji w LISP

Makro o nazwie defunsłuży do definiowania funkcji. Plikdefun makro potrzebuje trzech argumentów -

  • Nazwa funkcji
  • Parametry funkcji
  • Treść funkcji

Składnia defun to -

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

Zilustrujmy to pojęcie prostymi przykładami.

Przykład 1

Napiszmy funkcję o nazwie averagenum , która wypisze średnią z czterech liczb. Wyślemy te liczby jako parametry.

Utwórz nowy plik kodu źródłowego o nazwie main.lisp i wpisz w nim następujący kod.

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

Po wykonaniu kodu zwraca następujący wynik -

25

Przykład 2

Zdefiniujmy i wywołajmy funkcję, która obliczy pole koła, gdy promień okręgu zostanie podany jako argument.

Utwórz nowy plik kodu źródłowego o nazwie main.lisp i wpisz w nim następujący kod.

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

Po wykonaniu kodu zwraca następujący wynik -

Radius:  10.0
Area:   314.1592

Należy pamiętać, że -

  • Możesz podać pustą listę jako parametry, co oznacza, że ​​funkcja nie przyjmuje argumentów, lista jest pusta, zapisana jako ().

  • LISP dopuszcza również argumenty opcjonalne, wielokrotne i słowa kluczowe.

  • Ciąg dokumentacji opisuje cel funkcji. Jest powiązany z nazwą funkcji i można go uzyskać za pomocą plikudocumentation funkcjonować.

  • Ciało funkcji może składać się z dowolnej liczby wyrażeń Lispa.

  • Wartość ostatniego wyrażenia w treści jest zwracana jako wartość funkcji.

  • Możesz również zwrócić wartość z funkcji za pomocą return-from operator specjalny.

Omówmy pokrótce powyższe pojęcia. Kliknij poniższe linki, aby znaleźć szczegółowe informacje -

  • Parametry opcjonalne

  • Parametry odpoczynku

  • Parametry słów kluczowych

  • Zwracanie wartości z funkcji

  • Funkcje lambda

  • Funkcje mapowania