Einführung in die Digitale Elektronische Klangsynthese
8.1.2. Funktionsdefinitionen
Der Abschnitt Abschnitt 8.1.3 stellt den speziellen Ausdruck defn
als Bindung eines Symbols an eine Funktionsdefinition
vor. Funktionen müssen jedoch keinen Namen haben, insbesondere
dann, wenn Funktionen nur temporär oder lokal benötigt
werden. Solche Funktionen werden anonyme Funktionen genannt. In
clojure wird eine anonyme Funktion mit dem Operator fn
definiert:
;;; Definition einer anonymen Funktion: (fn [x] (* x x)) => #<user$eval7872$fn__7873 user$eval7872$fn__7873@503b27cc>
Da clojure bei der Auswertung nicht quotierter Listen als erstes
Element einer Liste einen Funktionsoperator erwartet, könnte die
Funktion quadrat
aus dem Abschnitt Abschnitt 8.1.3 auch folgendermaßen
mit einer anonymen Funktion ausgeführt werden:
((fn [x] (* x x)) 4) => 16
Der spezielle Ausdruck defn
ist im Grunde nur eine
Abkürzungsnotation für den folgenden, äquivalenten Ausdruck:
;;; Funktionsdefinition mit "def" (def quadrat (fn [x] (* x x))) => #'user/quadrat (quadrat 4) => 16
Da bei der praktischen Arbeit mit clojure sehr häufig mit anonymen
Funktionen gearbeitet wird, gibt es eine weitere
Abkürzungsnotation für anonyme Funktionen. Wird einer Liste das
#
-Zeichen vorangestellt, wird die Liste als Definition einer
anonymen Funktion interpretiert. In dieser Definition gibt es
keine explizite Definition von Argumenten in eckigen
Klammern. Vielmehr können Argumente der Funktion mit dem Zeichen
%
angesprochen werden. Die Quadratfunktion würde daher auch
folgendermaßen aufgerufen werden können:
;;; Alternative Aufrufform einer anonymen Funktion: (#(* % %) 4) => 16
Gibt es mehr, als ein Argument, werden die Argumente mit %1
,
%2
, … angesprochen:
(#(list %1 %2) 4 5) => (4 5)
Created: 2024-07-23 Di 10:40