Jahresarchiv Juni 14, 2021

VonLorenz Lehmann

SPCL – 1) Formen, S-Expressions, Funktionen

Einführung in die Sprache Common LISP

In dieser Unterrichtseinheit wird die Sprache Common LISP eingeführt. Hierzu betrachten wir Besonderheiten dieser Sprache, insbesondere die Syntax: sog. „S-Expressions“ (symbolic expressions) und Prefix (oder „Polish“) Notation. Des Weiteren befassen wir uns mit dem Konzept der  Evaluierung von Formen unter Berücksichtigung der Äquivalenz von Daten und Funktionen: „A lisp form is a lisp datum that is also a program, that is, it can be evaluated without an error.

Wir haben uns mit der Evaluierungsreihenfolge studiert. Lisp evaluiert Formen rekursiv. Hierzu ein kleines Beispiel aus diesem online LISP Tutorial. Folgende form soll evaluiert werden:

(+ 33 (* 2.3 4)) 9)

  1. The + function is looked up.
  2. 33 is evaluated (its value is 33).
  3. (* 2.3 4) is evaluated:
    1. The * function is looked up.
    2. 2.3 is evaluated (its value is 2.3)
    3. 4 is evaluated (its value is 4)
    4. 2.3 and 4 are passed to the * function.
    5. The * function returns 9.2. This is the value of (* 2.3 4).
  4. 9 is evaluated (its value is 9).
  5. 33, 9.2, and 9 are passed to the + function.
  6. The + function returns 51.2. This is the value of (+ 33 (* 2.3 4) 9).
  7. The Lisp system returns 51.2.

Wir haben sodann verschiedene Datentypen kennengelernt: symbols, floats, integers und ratios.

Wir haben unsere ersten Programmierversuche gestartet und unsere ersten kleinen LISP forms geschrieben. Dabei haben wir sog. „primitive functions“ (Funktionen, die bereits in der Sprache implementiert sind) verwendet, um Operationen mit Daten auszuführen. Diese waren: (*für die u.s. Tabellen nehmen wir an, die  Variable A hätte den Wert 10 und Variable B den Wert 20) :

Arithmetische Operatoren

+, -, *, /, mod, rem, incf, decf

Operator Description Example
+ Adds two operands (+AB) will give 30
Subtracts second operand from the first (- A B) will give -10
* Multiplies both operands (* A B) will give 200
/ Divides numerator by de-numerator (/ B A) will give 2
mod, rem Modulus Operator and remainder of after an integer division (mod B A) will give 0
incf Increments operator increases integer value by the second argument specified (incf A 3) will give 13
decf Decrements operator decreases integer value by the second argument specified (decf A 4) will

Prädikatsfunktionen

equalp, symbolp, numberp, oddp, evenp

Operator Description Example
equalp Checks if the values of the two arguments are equal (= A B) is not true.
symbolp Checks if the value of the argument is a symbol (symbolp A) is not true
numberp Checks if the value of the argument is a number (numberp A) is true.
oddp Checks if the value of the argument (integer) is odd (oddp A) is not true
evenp Checks if the value of the argument (integer) is even (evenp A) is true

Vergleichsoperatoren

=, /=, >, <, >=, <=, max, min

Operator Description Example
= Checks if the values of the operands are all equal or not, if yes then condition becomes true. (= A B) is not true.
/= Checks if the values of the operands are all different or not, if values are not equal then condition becomes true. (/= A B) is true.
> Checks if the values of the operands are monotonically decreasing. (> A B) is not true.
< Checks if the values of the operands are monotonically increasing. (< A B) is true.
>= Checks if the value of any left operand is greater than or equal to the value of next right operand, if yes then condition becomes true. (>= A B) is not true.
<= Checks if the value of any left operand is less than or equal to the value of its right operand, if yes then condition becomes true. (<= A B) is true.
max It compares two or more arguments and returns the maximum value. (max A B) returns 20
min It compares two or more arguments and returns the minimum value. (min A B) returns 20

 

Logische Operatoren

Hierfür nehmen wir an, A hat den Wert NIL (false) und B hat den Wert 5 (true).

Operator Description Example
and It takes any number of arguments. The arguments are evaluated left to right. If all arguments evaluate to non-nil, then the value of the last argument is returned. Otherwise nil is returned. (and A B) will return NIL.
or It takes any number of arguments. The arguments are evaluated left to right until one evaluates to non-nil, in such case the argument value is returned, otherwise it returns nil. (or A B) will return 5.
not It takes one argument and returns t if the argument evaluates to nil. (not A) will return T.

Danach haben wir die Macro Funktion „defun“ kennen gelernt, um unsere eigenen Funktionen zu definieren. Dies haben wir dann mit der Programmierung eines kleinen Würfelspiels zur Anwendung gebracht.

Seiten: 1 2

VonLorenz Lehmann

SPCL – Rekursion

Tafelaufschrieb zu Rekursion (vgl. LISP code auf Ilias):

; Beispiel mit cond

(defun myfun ()
    (cond ([termination-condition] [termination-action])
          ([recursion-condition] (myfun ()))
     )
)

; Beispiel mit if

(defun myfun ()
 (if  [termination-condition] 
    [termination-action]
  (myfun ())
  )
 ) 
      

IMG_5400

Hier eine Visualisierung der Rekursiven Funktion zur Generierung von Fibonacci Zahlen. Code-Beispiel:

(defun fib1 (n)
 (if  (or (= n 1) (= n 0)) 
    1
  (+ (fib1 (- n 1)) (fib1 (- n 2)))
  )
 ) 
      
IMG_5402
Vonadmin

Vorlage für studentische Beiträge

Abstract: Eine kurze Übersicht über das Projekt. Max. 300 Zeichen. Kann ggf. später als Textauszug (s.u.) verwendet werden.

Verantwortliche: Auflistung aller im Projekt beteiligten Studierenden und Betreuer, Zeitrahmen/Semester

Haupttext: Ausführliche Beschreibung des Projekts inklusive dessen Methodik, Herausforderungen, Erkenntnisse und des Ergebnisses. Gerne mutlimedial.

 

Anleitungen

Beitragsbild hinzufügen

    • Im Blockeditor in der rechten Leiste unter Beitrag -> Beitragsbild -> Beitragsbild festlegen -> Mediathek -> „Datei hochladen“ (neues Bild) oder „Mediathek“ (auswahl aus bereits verwendeten Bildern der WP-Seite)
    • Vorgegebene Eigenschaften: Höhe: 540 Pixel, Breite: 960 Pixel (halbe Kantenlänge von FullHD); Format: ideal: jpg/png. Placeholder.png ist als Platzhalter verfügbar (in diesem Beitrag bereits angewendet).
    • Kann durch unterschiedliche Tools, z.B. Apple Vorschau, Skript (FFMPEG, GIMP, Applescript, o.ä.) erzeugt werden, evtl. mit Online Editor?

Einbinden von Videos

    • Video hochladen: „Medien“ > „Datei hinzufügen“
    • Einbinden im Artikel:

 

Einbinden von (Mehrkanal-)Audio

    • Mehrkanal Audio-Dateien sollten zuvor auf ein “binaurales” Format gerendert werden. Es kann/sollte dann natürlich angegeben werden, dass es sich um eine binaurale Datei handelt. Gibt es eine bestimmte Lautsprecheraufstellung, die vorgesehen ist? Sie könnten diese in Binauralix simulieren und dann mit der Export Funktion (Menü -> Options -> Quickrecord) als binaurale Stereo-Datei rendern lassen.
    • Ein spezielles Player-Plugin erlaubt es, eine grobe Waveform-Vorschau sowie einen Player mit EQ-Funktionen kombiniert zu verwenden. Dafür benötigt es zwei Zeilen Shortcode (Den Pfad zur Datei muss man natürlich selbst setzen): 
Alex Player - Best audio player

 

Manueller Textauszug

    • Im Blockeditor in der rechten Leiste unter Beitrag -> Textauszug
    • Zusammenfassung des Projekts ähnlich wie beim Abstract, nur mit Zeichenobergrenze 150 Zeichen (inkl. Leerzeichen)

 

Tipps

Verwendung von Bildern

    • Bilder lassen sich übrigens in Größe verändern und auch eine “Beschriftung” direkt hinzufügen, diese ist dann grau hinterlegt, was oftmals schöner aussieht. Dazu, mit der Maus über dem Bild “hovern”, dann sollte ein kleiner Bleistift erscheinen -> darauf klicken, dan öffnet sich ein Editierfenster mit den entsprechenden Einstellungen.

 Umbrüche

    • Ein Beitrag/Artikel lässt sich auch in einzelne Seiten gliedern, das ist oftmals angenehmer, als eine lange “Papyrusrolle” hinabscrollen zu müssen und hilft auch der “Form”/Untergliederung. Hierzu gibt es sog. “Tags” die sich einfügen lassen, z.B. den Tag zum Weiterlesen “—— MORE ——“ und zum Seitenumbruch “—— PAGE BREAK ——“.

Informationen über den Autor

    • Wenn man in seinem Nutzerprofil (rechts oben in der WP-Menüleiste) biografische Informationen und ein Profilbild hinterlegt (freiwillig!), erscheinen diese Informationen automatisch unter eigenen Beiträgen in den von WP vorgesehenen Feldern (die nicht ausgeblendet werden können).

 

Verwendung von Kategorien und Schlagwörtern

Kategorien: „Lehrveranstaltung“ und „Studienprojekt“

Schlagwörter: je nach Projekt. Im Classic Editor lassen sich in der rechten Seitenleiste unter Schlagwörter > „Wähle aus den meistgenutzen Schlagwörtern“ bereits verwendete Schlagwörter anzeigen. Bitte immer zuerst dort nachschauen, bevor neue Schlagwörter erzeugt werden!