Scheme: Unterschied zwischen den Versionen

Aus Fachschaft_Informatik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(14 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Scheme ist eine funktionale Programmiersprache die im Modul [[SE3]] verwendet wird.
Scheme ist eine funktionale [[Programmiersprache]] die im [[Modul]] [[SE3]] verwendet wird.


== Auflistung der Scheme-Funktionen ==
== Auflistung der Scheme-Funktionen ==
Zeile 7: Zeile 7:
=== grundlegende Funktionen ===
=== grundlegende Funktionen ===


(lambda <i>parameter</i> <i>funktion</i>)
(lambda ''parameter'' ''funktion'')
:Der Rückgabewert dieser Funktion ist eine Funktion die alle in der Liste <i>parameter</i> stehenden Parameter nimmt und mit den Funktionsaufrufen die in <i>funktion</i> stehen auswertet.
:Der Rückgabewert dieser Funktion ist eine Funktion die alle in der Liste ''parameter'' stehenden Parameter nimmt und mit den Funktionsaufrufen die in ''funktion'' stehen auswertet.


(define <i>name</i> <i>wert</i>)
(define ''name'' ''wert'')
:Weist der Variable <i>name</i> den wert <i>wert</i> zu. Dieser Definition gilt nur in dem Block in dem sie steht und in allen unterblöcken (ausser wenn sie verschattet wird).
:Weist der Variable ''name'' den wert ''wert'' zu. Dieser Definition gilt nur in dem Block in dem sie steht und in allen unterblöcken (ausser wenn sie verschattet wird).


(let (<i>zuweisungen</i>) <i>s-expression</i>)<br>
(let (''zuweisungen'') ''s-expression'')<br />
(let* (<i>zuweisungen</i>) <i>s-expression</i>)
(let* (''zuweisungen'') ''s-expression'')
:Die in <i>zuweisungen</i> definierten Variablen können im Rumpf <i>s-expression</i> genutzt werden. Danach sind sie weg.
:Die in ''zuweisungen'' definierten Variablen können im Rumpf ''s-expression'' genutzt werden. Danach sind sie weg.
:Bei let kann man für die Definition einer Variable nicht auf die anderen soeben definierten Variablen zugreifen. Mit let* geht das.
:Bei let kann man für die Definition einer Variable nicht auf die anderen soeben definierten Variablen zugreifen. Mit let* geht das.


(quote <i>operand</i>)<br>
(quote ''operand'')<br />
'<i>operand</i>
'''operand''
:Gibt <i>operand</i> zurück (ohne diesen auszuwerten).
:Gibt ''operand'' zurück (ohne diesen auszuwerten).


(eval <i>ausdruck</i>)
(eval ''ausdruck'')
:Wertet <i>ausdruck</i> aus und gibt dessen Rückgabewert zurück.
:Wertet ''ausdruck'' aus und gibt dessen Rückgabewert zurück.


(closure )
(closure )
Zeile 29: Zeile 29:


=== bedingte Auswertung ===
=== bedingte Auswertung ===
(if <i>bedingung</i> <i>dann</i>)<br>
(if ''bedingung'' ''dann'') ["Racket" unterstützt ifs ohne else nicht]<br />
(if <i>bedingung</i> <i>dann</i> <i>sonst</i>)
(if ''bedingung'' ''dann'' ''sonst'')
:Wenn der Aufruf von <i>bedingung</i> wahr zurückgibt ist der eigene Rückgabewert die Auswertung von <i>dann</i>, andernfalls die Auswertung von <i>sonst</i> (sofern vorhanden).
:Wenn der Aufruf von ''bedingung'' wahr zurückgibt ist der eigene Rückgabewert die Auswertung von ''dann'', andernfalls die Auswertung von ''sonst'' (sofern vorhanden).


(cond (<i>bedingung1</i> <i>ausdruck1</i>) (<i>bedingung2</i> <i>ausdruck2</i>) ... (<i>bedingungn</i> <i>ausdruckn</i>))<br>
(cond (''bedingung1'' ''ausdruck1'') (''bedingung2'' ''ausdruck2'') ... (''bedingungn'' ''ausdruckn''))<br />
(cond (<i>bedingung1</i> <i>ausdruck1</i>) (<i>bedingung2</i> <i>ausdruck2</i>) ... (<i>bedingungn</i> <i>ausdruckn</i>) (else <i>ausdrucksonst</i>))
(cond (''bedingung1'' ''ausdruck1'') (''bedingung2'' ''ausdruck2'') ... (''bedingungn'' ''ausdruckn'') (else ''ausdrucksonst''))
:Der eigene Rückgabewert ist die Auswertung des ersten Ausdrucks dessen Bedingung zu wahr ausgewertet wird. Wird keine zu Wahr ausgewertet ist es die Auswertung von <i>ausdrucksonst</i> (sofern vorhanden, sonst undefiniert).
:Der eigene Rückgabewert ist die Auswertung des ersten Ausdrucks dessen Bedingung zu wahr ausgewertet wird. Wird keine zu Wahr ausgewertet ist es die Auswertung von ''ausdrucksonst'' (sofern vorhanden, sonst undefiniert).


(case <i>ausdruck</i> (<i>liste1</i> <i>ausdruck1</i>)(<i>liste2</i> <i>ausdruck2</i>) ... (<i>listen</i> <i>ausdruckn</i>))<br>
(case ''ausdruck'' (''liste1'' ''ausdruck1'')(''liste2'' ''ausdruck2'') ... (''listen'' ''ausdruckn''))<br />
(case <i>ausdruck</i> (<i>liste1</i> <i>ausdruck1</i>)(<i>liste2</i> <i>ausdruck2</i>) ... (<i>listen</i> <i>ausdruckn</i>) (else <i>audruckelse</i>))
(case ''ausdruck'' (''liste1'' ''ausdruck1'')(''liste2'' ''ausdruck2'') ... (''listen'' ''ausdruckn'') (else ''audruckelse''))
:Wertet <i>ausdruck</i> aus und vergleicht das Ergebnis mit allen Werten aus den Listen bis ein Vergleich wahr wird oder das Ende erreicht ist. Der zu einem gelungenen Vergleich gehörende Ausdruck wird ausgewertet und zurückgegeben. Sonst wird der <i>ausdruckelse</i> ausgewertet und zurückgegeben (sofern vorhanden, sonst undefiniert).
:Wertet ''ausdruck'' aus und vergleicht das Ergebnis mit allen Werten aus den Listen bis ein Vergleich wahr wird oder das Ende erreicht ist. Der zu einem gelungenen Vergleich gehörende Ausdruck wird ausgewertet und zurückgegeben. Sonst wird der ''ausdruckelse'' ausgewertet und zurückgegeben (sofern vorhanden, sonst undefiniert).


=== logische Operatoren ===
=== logische Operatoren ===
(or (<i>ausdruck1</i>) (<i>ausdruck1</i>) ... (<i>ausdruckn</i>))
(or (''ausdruck1'') (''ausdruck1'') ... (''ausdruckn''))
:Der Rückgabewert ist wahr, wenn zumindest ein Ausdruck zu wahr ausgewertet wird. Dabei wird mit [[Lazy Evaluation]] von links nach rechts ausgewertet.
:Der Rückgabewert ist wahr, wenn zumindest ein Ausdruck zu wahr ausgewertet wird. Dabei wird mit [[Lazy Evaluation]] von links nach rechts ausgewertet. Sobald dabei ein Ausdruck zu undefiniert ausgewertet wird, wird sofort undefined zurückgegeben.


(and (<i>ausdruck1</i>) (<i>ausdruck1</i>) ... (<i>ausdruckn</i>))
(and (''ausdruck1'') (''ausdruck1'') ... (''ausdruckn''))
:Der Rückgabewert ist falsch, wenn zumindest ein Ausdruck zu falsch ausgewertet wird. Dabei wird mit [[Lazy Evaluation]] von links nach rechts ausgewertet.
:Der Rückgabewert ist falsch, wenn zumindest ein Ausdruck zu falsch ausgewertet wird. Dabei wird mit [[Lazy Evaluation]] von links nach rechts ausgewertet. Sobald dabei ein Ausdruck zu undefiniert ausgewertet wird, wird sofort undefined zurückgegeben.


(not <i>ausdruck</i>)
(not ''ausdruck'')
:Wahr, wenn <i>ausdruck</i> zu falsch ausgewertet wird.
:Wahr, wenn ''ausdruck'' zu falsch ausgewertet wird, Undifined, wenn ''ausdruck'' zu undifined ausgewertet wird.


=== Vergleichsoperatoren ===
=== Vergleichsoperatoren ===
(= <i>operand1</i> <i>operand2</i> ... <i>operandn</i>)
(= ''zahl1'' ''zahl2'' ... ''zahln'')
:Ist wahr wenn alle Operanden gleich sind.
:Ist wahr wenn alle Zahlen gleich sind.


(&lt; <i>zahl1</i> <i>zahl2</i> ... <i>zahln</i>)
(&lt; ''zahl1'' ''zahl2'' ... ''zahln'')
:Ist wahr wenn von zwei jeweils nebeneinander stehenden Zahlen die linke kleiner ist als die rechte.
:Ist wahr wenn von zwei jeweils nebeneinander stehenden Zahlen die linke kleiner ist als die rechte.


(&gt; <i>zahl1</i> <i>zahl2</i> ... <i>zahln</i>)
(&gt; ''zahl1'' ''zahl2'' ... ''zahln'')
:Ist wahr wenn von zwei jeweils nebeneinander stehenden Zahlen die linke grösser ist als die rechte.
:Ist wahr wenn von zwei jeweils nebeneinander stehenden Zahlen die linke grösser ist als die rechte.


(eqv? <i>operand1</i> <i>operand2</i>)
(string&gt;? ''string1'' ''string2'')
:Wahr wenn die Symbole die durch Auswertung von <i>operand1</i> und <i>operand2</i> entstehen gleich sind.
:Wahr wenn ''string1'' irgendwie kleiner als ''string2'' ist. Lexikalisch?, ASCII-Wert?


(string&gt;? <i>string1</i> <i>string2</i>)
(string=? ''string1'' ''string2'')
:Wahr wenn <i>string1</i> irgendwie kleiner als <i>string2</i> ist. Lexikalisch?, ASCII-Wert?
:Wahr wenn ''string1'' die gleiche Zeichenkette wie ''string2'' ist.
 
(eqv? ''operand1'' ''operand2'')
:Wahr wenn ''ausdruck1'' und ''ausdruck2'' identisch sind (also bei Zeigern auf den gleichen Speicherbereich zeigen) oder Zahlen und gleich sind.
 
(equal? ''operand1'' ''operand2'')
:Wahr, wenn beide Operanden wertgleich sind.
 
(eq? ''operand1'' ''operand2'')
:Wahr wenn ''ausdruck1'' und ''ausdruck2'' identisch sind (also bei Zeigern auf den gleichen Speicherbereich zeigen).


=== numerische Funktionen ===
=== numerische Funktionen ===
(+ <i>operand1</i> <i>operand2</i> ... <i>operandn</i>)
(+ ''operand1'' ''operand2'' ... ''operandn'')
:Gibt die Summe der Operanden zurück.
:Gibt die Summe der Operanden zurück.


(* <i>operand1</i> <i>operand2</i> ... <i>operandn</i>)
(* ''operand1'' ''operand2'' ... ''operandn'')
:Gibt das Produkt der Operanden zurück.
:Gibt das Produkt der Operanden zurück.


(/ <i>operand1</i> <i>operand2</i>)
(/ ''operand1'' ''operand2'')
:Gibt den Quotienten der Operanden zurück.
:Gibt den Quotienten der Operanden zurück.


(- <i>operand1</i> <i>operand2</i>)
(- ''operand1'' ''operand2'')
:Gibt die Differenz der Operanden zurück.
:Gibt die Differenz der Operanden zurück.


(sqrt <i>operand</i>)
(sqrt ''operand'')
:Gibt die Quadratwurzel von <i>operand</i> zurück.
:Gibt die Quadratwurzel von ''operand'' zurück.


(sin <i>operand</i>)
(sin ''operand'')
:Gibt deb Sinus von <i>operand</i> zurück.
:Gibt deb Sinus von ''operand'' zurück.


(exp <i>basis</i> <i>exponent</i>)
(expt ''basis'' ''exponent'')
:Gibt <i>basis</i> hoch <i>exponent</i> zurück.
:Gibt ''basis'' hoch ''exponent'' zurück.


(modulo <i>operand1</i> <i>operand2</i>)
(modulo ''operand1'' ''operand2'')
:Gibt den Rest bei ganzzahliger Division zurück.
:Gibt den Rest bei ganzzahliger Division zurück.
(ceiling ''zahl'')
:Gibt ''zahl'' zur nächsten ganzen Zahl aufgerundet zurück.
(floor ''zahl'')
:Gibt ''zahl'' zur nächsten ganzen Zahl abgerundet zurück.
(round ''zahl'')
:Gibt ''zahl'' zur nächsten ganzen Zahl kaufmännisch gerundet zurück.


=== Meta-Funktionen ===
=== Meta-Funktionen ===
(display "<i>text</i>")
(display "''text''")
:Schreibt <i>text</i> auf die Standardausgabe.
:Schreibt ''text'' auf die Standardausgabe.
 
(error "''text''")
:Schreibt ''text'' als Fehlermeldung und malt einen [[Bug]] dazu.


(error "<i>text</i>")
(require ''wasauchimmer'')
:Schreibt <i>text</i> als Fehlermeldung und malt einen [[Bug]] dazu.
:Lädt ''wasauchimmer'' irgendwoher.


=== Listen-Funktionen ===
=== Listen-Funktionen ===
(car <i>liste</i>)
(car ''liste'')
:Gibt den Kopf der <i>liste</i> zurück.
:Gibt den Kopf der ''liste'' zurück.
 
(cdr ''liste'')
:Gibt den Rumpf der ''liste'' zurück.
 
(list ''element1'' ''element2'' ''elementn'')
:Gibt die Liste bestehend aus den Elementen zurück. (Äquivalent zu '(''element1'' ''element2'' ''elementn''))
 
(length ''liste'')
:Gibt die Länge der Liste zurück.


(cdr <i>liste</i>)
(null? ''liste'')
:Gibt den Rumpf der <i>liste</i> zurück.
:Gibt true zurück, wenn die Liste die leere Liste ('()) ist.
 
(append ''liste1'' ''liste2'')
:Gibt die Liste zurück, die alle Elemente aus ''liste1'' vor allen Elementen aus ''liste2'' enthält.
 
(member ''element'' ''liste''
:Gibt false zurück, wenn ''element'' nicht in ''liste'' enthalten ist, sonst den Teil der Liste der nach dem Element kommt (Dieser wird aber auch als true interpretiert).
 
(cons ''element'' ''liste'')
:Gibt die Liste zurück, die als erstes ''element'' enthält und dahinter alle Elemente aus ''liste''
 
(pair ''parameter'')
:Gibt true zurück, wenn ''parameter'' ein Paar ist.
 
(assoc ''wert'' (''listen1'' ''listen2'' ... ''listenn'' ))
:Gibt die erste Liste zurück, deren erstes Element gleich ''wert'' ist.


=== Typprädikate ===
=== Typprädikate ===
(symbol <i>operand</i>)
(symbol? ''operand'')
:Wahr, wenn <i>operand</i> ein Symbol ist.
:Wahr, wenn ''operand'' ein Symbol ist.
 
=== Testprädikate ===
(zero? ''zahl'')
:Wahr, wenn ''zahl'' 0 ist.
 
== Siehe auch ==
* [[DrScheme]]
 
[[Kategorie:Programmiersprache]]

Aktuelle Version vom 11. Juni 2012, 23:29 Uhr

Scheme ist eine funktionale Programmiersprache die im Modul SE3 verwendet wird.

Auflistung der Scheme-Funktionen[Bearbeiten]

Wie immer ohne Anspruch auf Richtigkeit, Vollständigkeit oder sonst irgendwas.

grundlegende Funktionen[Bearbeiten]

(lambda parameter funktion)

Der Rückgabewert dieser Funktion ist eine Funktion die alle in der Liste parameter stehenden Parameter nimmt und mit den Funktionsaufrufen die in funktion stehen auswertet.

(define name wert)

Weist der Variable name den wert wert zu. Dieser Definition gilt nur in dem Block in dem sie steht und in allen unterblöcken (ausser wenn sie verschattet wird).

(let (zuweisungen) s-expression)
(let* (zuweisungen) s-expression)

Die in zuweisungen definierten Variablen können im Rumpf s-expression genutzt werden. Danach sind sie weg.
Bei let kann man für die Definition einer Variable nicht auf die anderen soeben definierten Variablen zugreifen. Mit let* geht das.

(quote operand)
'operand

Gibt operand zurück (ohne diesen auszuwerten).

(eval ausdruck)

Wertet ausdruck aus und gibt dessen Rückgabewert zurück.

(closure )

bedingte Auswertung[Bearbeiten]

(if bedingung dann) ["Racket" unterstützt ifs ohne else nicht]
(if bedingung dann sonst)

Wenn der Aufruf von bedingung wahr zurückgibt ist der eigene Rückgabewert die Auswertung von dann, andernfalls die Auswertung von sonst (sofern vorhanden).

(cond (bedingung1 ausdruck1) (bedingung2 ausdruck2) ... (bedingungn ausdruckn))
(cond (bedingung1 ausdruck1) (bedingung2 ausdruck2) ... (bedingungn ausdruckn) (else ausdrucksonst))

Der eigene Rückgabewert ist die Auswertung des ersten Ausdrucks dessen Bedingung zu wahr ausgewertet wird. Wird keine zu Wahr ausgewertet ist es die Auswertung von ausdrucksonst (sofern vorhanden, sonst undefiniert).

(case ausdruck (liste1 ausdruck1)(liste2 ausdruck2) ... (listen ausdruckn))
(case ausdruck (liste1 ausdruck1)(liste2 ausdruck2) ... (listen ausdruckn) (else audruckelse))

Wertet ausdruck aus und vergleicht das Ergebnis mit allen Werten aus den Listen bis ein Vergleich wahr wird oder das Ende erreicht ist. Der zu einem gelungenen Vergleich gehörende Ausdruck wird ausgewertet und zurückgegeben. Sonst wird der ausdruckelse ausgewertet und zurückgegeben (sofern vorhanden, sonst undefiniert).

logische Operatoren[Bearbeiten]

(or (ausdruck1) (ausdruck1) ... (ausdruckn))

Der Rückgabewert ist wahr, wenn zumindest ein Ausdruck zu wahr ausgewertet wird. Dabei wird mit Lazy Evaluation von links nach rechts ausgewertet. Sobald dabei ein Ausdruck zu undefiniert ausgewertet wird, wird sofort undefined zurückgegeben.

(and (ausdruck1) (ausdruck1) ... (ausdruckn))

Der Rückgabewert ist falsch, wenn zumindest ein Ausdruck zu falsch ausgewertet wird. Dabei wird mit Lazy Evaluation von links nach rechts ausgewertet. Sobald dabei ein Ausdruck zu undefiniert ausgewertet wird, wird sofort undefined zurückgegeben.

(not ausdruck)

Wahr, wenn ausdruck zu falsch ausgewertet wird, Undifined, wenn ausdruck zu undifined ausgewertet wird.

Vergleichsoperatoren[Bearbeiten]

(= zahl1 zahl2 ... zahln)

Ist wahr wenn alle Zahlen gleich sind.

(< zahl1 zahl2 ... zahln)

Ist wahr wenn von zwei jeweils nebeneinander stehenden Zahlen die linke kleiner ist als die rechte.

(> zahl1 zahl2 ... zahln)

Ist wahr wenn von zwei jeweils nebeneinander stehenden Zahlen die linke grösser ist als die rechte.

(string>? string1 string2)

Wahr wenn string1 irgendwie kleiner als string2 ist. Lexikalisch?, ASCII-Wert?

(string=? string1 string2)

Wahr wenn string1 die gleiche Zeichenkette wie string2 ist.

(eqv? operand1 operand2)

Wahr wenn ausdruck1 und ausdruck2 identisch sind (also bei Zeigern auf den gleichen Speicherbereich zeigen) oder Zahlen und gleich sind.

(equal? operand1 operand2)

Wahr, wenn beide Operanden wertgleich sind.

(eq? operand1 operand2)

Wahr wenn ausdruck1 und ausdruck2 identisch sind (also bei Zeigern auf den gleichen Speicherbereich zeigen).

numerische Funktionen[Bearbeiten]

(+ operand1 operand2 ... operandn)

Gibt die Summe der Operanden zurück.

(* operand1 operand2 ... operandn)

Gibt das Produkt der Operanden zurück.

(/ operand1 operand2)

Gibt den Quotienten der Operanden zurück.

(- operand1 operand2)

Gibt die Differenz der Operanden zurück.

(sqrt operand)

Gibt die Quadratwurzel von operand zurück.

(sin operand)

Gibt deb Sinus von operand zurück.

(expt basis exponent)

Gibt basis hoch exponent zurück.

(modulo operand1 operand2)

Gibt den Rest bei ganzzahliger Division zurück.

(ceiling zahl)

Gibt zahl zur nächsten ganzen Zahl aufgerundet zurück.

(floor zahl)

Gibt zahl zur nächsten ganzen Zahl abgerundet zurück.

(round zahl)

Gibt zahl zur nächsten ganzen Zahl kaufmännisch gerundet zurück.

Meta-Funktionen[Bearbeiten]

(display "text")

Schreibt text auf die Standardausgabe.

(error "text")

Schreibt text als Fehlermeldung und malt einen Bug dazu.

(require wasauchimmer)

Lädt wasauchimmer irgendwoher.

Listen-Funktionen[Bearbeiten]

(car liste)

Gibt den Kopf der liste zurück.

(cdr liste)

Gibt den Rumpf der liste zurück.

(list element1 element2 elementn)

Gibt die Liste bestehend aus den Elementen zurück. (Äquivalent zu '(element1 element2 elementn))

(length liste)

Gibt die Länge der Liste zurück.

(null? liste)

Gibt true zurück, wenn die Liste die leere Liste ('()) ist.

(append liste1 liste2)

Gibt die Liste zurück, die alle Elemente aus liste1 vor allen Elementen aus liste2 enthält.

(member element liste

Gibt false zurück, wenn element nicht in liste enthalten ist, sonst den Teil der Liste der nach dem Element kommt (Dieser wird aber auch als true interpretiert).

(cons element liste)

Gibt die Liste zurück, die als erstes element enthält und dahinter alle Elemente aus liste

(pair parameter)

Gibt true zurück, wenn parameter ein Paar ist.

(assoc wert (listen1 listen2 ... listenn ))

Gibt die erste Liste zurück, deren erstes Element gleich wert ist.

Typprädikate[Bearbeiten]

(symbol? operand)

Wahr, wenn operand ein Symbol ist.

Testprädikate[Bearbeiten]

(zero? zahl)

Wahr, wenn zahl 0 ist.

Siehe auch[Bearbeiten]