Was ist eine lineare Funktion

Werbung
Kü /Info Oberstufe
KI - Scheme
Sj. 2013/2014
Einschub: Einführung in grundlegende Konzepte von
Scheme
 Video:
o
o
o
o
o
o
o
„KI- Scheme Editor“ - http://youtu.be/CJnPlzK694M
„KI – Scheme – polnische Schreibweise 1“ - http://youtu.be/gFns857xqt8
„KI – Scheme – polnische Schreibweise 2“ - http://youtu.be/QUTbaGMZVfU
„KI – Scheme – First-Rest“ - http://youtu.be/UJD14Erbq2M
„KI- Scheme – Listen I“ – http://youtu.be/TeGOhvoSdc4
„KI- Scheme – Listen II“ – http://youtu.be/hCqdeVBo1LE
„KI - Konstanten“ - http://youtu.be/0KOybwo0iVI
Systeme der KI (so auch automatische Übersetzungssysteme) werden häufig funktional
implementiert. Bisher haben wir imperative bzw. objektorientierte Programmierung
kennengelernt. Daher hier ein paar Grundlagen zur funktionalen Programmierung.
Scheme ist eine funktionale Programmiersprache (Abart von LISP) und es bedarf einiger
Umorientierung, wenn man bisher lediglich imperativ oder objektorientiert programmiert
hat.
Folgende wichtige Vokabeln solltest du bereits kennen (oder nun klären):
- Operator
- Funktion
- Parameter
- Variable (global und lokal)
- Argument
Folgende typische selbstgeschriebene Schemefunktion zum Herausnehmen des dritten
Elementes aus einer Liste (liste) sei gegeben:
(define (drittes liste)
(first (rest (rest liste))))
Würde man diese Funktion ausführen, so würde man z.B. (drittes `(1 2 3 4 5)) aufrufen und
dann 3 zurückbekommen. Ein Beispiel ist hier zu finden: einführungs bsp.ss
Ausgeführt werden die Funktionen im unteren Fenster, indem man ihnen konkrete
Parameter übergibt.
Beispiel: (drittes `(a b c d e))
Aufgabe Einschub 1:
1. Führe die Beispieldatei einführungs bsp.ss aus, indem du zunächst im unteren Fenster
(drittes …) mit verschiedenartigen Listen ausprobierst. Danach definiere dir selbst Listen
im oberen Fenster als Konstanten, z.B. (define *liste1* `(a c b)) und rufe dann im unteren
Fenster wieder die Funktion (drittes …) auf, aber diesmal mit den selbstdefinierten Listen.
Vergleiche die jeweiligen Ausgaben. Gibt es Unterschiede?
2. Schreibe Selbst eine Funktion, die die Liste *lex* aus Teil 1 bearbeitet und `frisst
Kü /Info Oberstufe
KI - Scheme
Sj. 2013/2014
ausgibt.
Folgende Konventionen bzgl. Scheme sind zu beachten:
0. Neue Schreibweise, polnische Notation:
 Video:
o „KI – Scheme – polnische Schreibweise 1“ - http://youtu.be/gFns857xqt8
o „KI – Scheme – polnische Schreibweise 2“ - http://youtu.be/QUTbaGMZVfU
1. Bisher gewohnt (Infix-Notation): "Argument Operator Argument"
z.B.: x + y oder 3 : 4.
Neu: bei der polnischen Notation wird der Operator bzw. der Name der
Funktion nach vorne geschrieben: (Operator Argument Argument)
z.B. (+ x y) oder (: 3 4) oder (first liste) oder (drittes liste).
Beachte die Klammern um den Ausdruck, diese müssen gesetzt werden, da
nicht bei jedem Operator (jeder Funktion) sofort ersichtlich ist, wie viele
Argumente folgen werden und Operatoren (Funktionen in Scheme) oft
ineinander verschachtelt werden.
2. Auf Grund der Schreibweise der polnischen Notation entstehen bei
verschachtelten Funktionen (Operatoren) viele Klammern.
1. Scheme-Funktionen werden wie verschachtelte Funktionen in der Mathematik
behandelt: Es werden Eingangsargumente an eine komplexe Funktion gegeben, die
Funktion wird darauf angewendet und am Ende wird automatisch ein Funktionswert
ausgegeben. So auch in Scheme.
(Video dazu mathematische Funktionen auf YouTube/akschule2)
Bsp:
Mathematik: f(x)=3x + 1 und mit einem speziellen Argument x=3 => f(3) = 10.
Scheme:
oberes Editor Fenster: (define (f x) (+ (· 3 x) 1))
unteres Editor Fenster: (f 3) gibt automatisch 10 aus.
oberes Editor Fenster: (define (zweites liste) (first (rest liste)))
unteres Editor Fenster: (zweites `(a x d f)) gibt automatisch x aus.
Beachte:
1. Um reservierte Worte bzw. Funktionsnamen der Programmiersprache, hier
z.B. "define" oder „first“ von selbst erzeugten Funktionen zu unterscheiden,
Kü /Info Oberstufe
KI - Scheme
Sj. 2013/2014
werden eigenen Funktionen immer in Deutsch formuliert, wogegen die
Scheme-Funktionen in Englisch formuliert sind.
2. Verschachtelte Funktionen werden immer von innen nach außen bearbeitet.
Also bei (+ (· 3 x) 1)) zuerst (· 3 x) berechnen und dann die äußere Funktion
(+ … 1) oder bei (first (rest liste)) wird zuerst die Funktion „rest“ auf das
Argument “liste“ angewendet und danach erst auf das Ergebnis davon die
Funktion „first“.
Aufgabe Einschub 2:
Schreibe folgende mathematische Funktionen als Scheme-Funktionen in polnischer
Notation:
n(x) = 5x - 7
o(x) = (-3x + 5)·2
l(x)=(3x + 3)(2x - 7)
Zusätzlich: Hilfen dazu: Hilfen zum Programmieren der Funktionen
k(x) = (2x - 3)3 + 4
m(x,y)=( 2x · 3y) - 4
2. Alles in Scheme sind Listen:
 Video:
o „KI- Scheme – Listen I“ – http://youtu.be/TeGOhvoSdc4
o „KI- Scheme – Listen II“ – http://youtu.be/hCqdeVBo1LE
a. Datenlisten z.B. '(1 2 3 4) oder '(a b c d) oder '(hallo wie geht’s). Die
einzelnen Daten werden einfach durch ein Leerzeichen voneinander getrennt.
So ist im letzten Beispiel `hallo ein Datum.
b. Listen mit Argumenten zu Funktionen (Operatoren) (+ 3 4) oder (first list).
Das erste Argument nach der öffnenden Klammer ist dabei immer der
Funktionsname (Operator) und danach folgt eine Liste von möglichen
Parametern.
Beachte: eine Datenliste wird mit einem Apostroph zu Beginn gekennzeichnet '(…),
dadurch weiß der Scheme-Compiler, dass die Argumente der Liste alle lediglich als
Daten zu behandeln sind. Anders ohne Apostroph (….), dann wird das erste Argument
nach der Klammer als Funktionsname identifiziert und alle weiteren als Parameter,
die auf die Funktion anzuwenden sind.
Kü /Info Oberstufe
KI - Scheme
Sj. 2013/2014
Aufgabe Einschub 3:
Öffne folgende Datei: einführungs bsp.ss
Gib im unteren Fenster des Editors folgendes ein:
`(drittes `(a b c d)) und dann (drittes `(a b c d))
Was stellst du fest??
3. Man kann in Scheme globale Konstanten definieren. Um z.B. beim Testen der
Funktionen Parameter nicht jedes Mal aufwendig neu eingeben zu müssen, definiert
man sich eine globale Variable und weist ihr einen definierten Wert bzw. Liste zu. Der
Name einer globalen Variablen wird in * gehalten. Z.B. *test* ist der Name der
globalen Variablen und wenn man ihr eine längere Liste zuweisen möchte, so sieht
das folgendermaßen aus: (define *test* '(1 2 3 4 5 6 7 8 9)).
 Video:
o „KI - Konstanten“ - http://youtu.be/0KOybwo0iVI
Aufgabe Einschub 4:
Öffne die Datei einführungs bsp.ss
Füge folgende globale Variable im oberen Fenster ein:
(define *test* '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))
Starte im unteren Fenster folgenden Aufruf: (drittes *test*) und (viertes *test*)
Was stellst du fest?
Welchen Vorteil könnten solche globalen Variablen bieten?
Kü /Info Oberstufe
KI - Scheme
Sj. 2013/2014
Herunterladen