Evaluator-Änderungen von JACK2 nach JACK3: Unterschied zwischen den Versionen

Aus JACK Wiki
Zur Navigation springen Zur Suche springen
(Auslagern der JACK3-Funktionalitäten auf separate Seiten)
 
(8 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Vorlage:Warnung|Warnung=Diese Seite ist beinhaltet alle Unterschiede zum alten Evaluator im JACK3 System. JACK3 ist derzeit noch in Entwicklung und noch nicht für die Benutzung freigegeben.}}
In JACK3 wird eine neue Evaluatorversion genutzt. Im Folgenden sind die Unterschiede zur alten Version unter JACK2 aufgelistet.
==Allgemein==
In JACK3 wird nun eine neue Evaluatorversion genutzt. Im folgenden werden die Änderungen/Unterschiede zur alten Version aufgezählt.


==Zeichenketten/Strings==
==Zeichenketten/Strings ==
Zeichenketten/Strings können in der Syntax mit einfachen oder doppelten Anführungszeichen verwendet werden.
Zeichenketten/Strings können in der Syntax mit einfachen (') oder doppelten Anführungszeichen (") verwendet werden. Eine Benutzung der jeweils anderen ist dann ohne Escaping <code>\" \'</code> möglich.
 
Eine Benutzung der jeweils anderen ist dann ohne Escaping <code>\" \'</code> möglich.


'''Achtung! Das Escaping wird nicht vom Evaluator aufgelöst! '''
'''Achtung! Das Escaping wird nicht vom Evaluator aufgelöst! '''


Bsp.:
Beispiele:


* <code>"Dies ist ein 'Beispiel'."</code>
*<code>"Dies ist ein 'Beispiel'."</code>
* <code>'Dies ist ein anderes "Beispiel".'</code>
* <code>'Dies ist ein anderes "Beispiel".'</code>
* <code>"Dies ist ein drittes \"Beispiel\"."</code>
* <code>"Dies ist ein drittes \"Beispiel\"."</code>
* <code>'Dies ist ein letztes \'Beispiel\'.'</code>
*<code>'Dies ist ein letztes \'Beispiel\'.'</code>
 
Zeichenketten werden nicht mehr vom Evaluator zerlegt und interpretiert.
 
Das heißt, die Ersetzung von Variablen mit ihren zugehörigen Werten in Zeichenketten geschieht nicht mehr automatisch.


Bsp.: In <code>"Die Ersetzung von Variablen [var=text1] wird nicht mehr automatisch vorgenommen."</code> wird <code>[var=text1]</code> nicht ersetzt.
Zeichenketten werden nicht mehr vom Evaluator zerlegt und interpretiert. Das heißt, die Ersetzung von Variablen mit ihren zugehörigen Werten in Zeichenketten geschieht nicht mehr automatisch.


Beispiel: In <code>"Die Ersetzung von Variablen [var=text1] wird nicht mehr automatisch vorgenommen."</code> wird <code>[var=text1]</code> nicht ersetzt.


Mit der Funktion <code>concat()</code> können Variablenwerte aber mit einer oder mehreren Zeichenketten verknüpft werden:
Mit der Funktion <code>concat()</code> können Variablenwerte aber mit einer oder mehreren Zeichenketten verknüpft werden:


Bsp.: In <code> concat("Die Ersetzung von Variablen ", [var=text1], " kann so vorgenommen werden.") </code> wird <code>[var=text1]</code> durch ihren Wert ersetzt.
Beispiel: In <code>concat("Die Ersetzung von Variablen ", [var=text1], " kann so vorgenommen werden.")</code> wird <code>[var=text1]</code> durch ihren Wert ersetzt.
 


Nutzt man in <code>equalsExpr()</code> Anführungszeichen, wird alles in den Anführungszeichen als Text erkannt. Lässt man die Anführungszeichen weg, wird alles als mathematischer Ausdruck erkannt.
Nutzt man in <code>equalsExpr()</code> Anführungszeichen, wird alles in den Anführungszeichen als Text erkannt. Lässt man die Anführungszeichen weg, wird alles als mathematischer Ausdruck erkannt.


Bsp:
Beispiele:
* <code>equalsExpr('x^2+3', [input=gleichung])</code> -> <code>x^2+3</code> wird als Text, nicht als mathematischer Ausdruck erkannt.
*<code>equalsExpr('x^2+3', [input=gleichung])</code> -> <code>x^2+3</code> wird als Text, nicht als mathematischer Ausdruck erkannt.
* <code>equalsExpr(x^2+3, [input=gleichung])</code> -> <code>x^2+3</code> wird als mathematischer Ausdruck erkannt.
*<code>equalsExpr(x^2+3, [input=gleichung])</code> -> <code>x^2+3</code> wird als mathematischer Ausdruck erkannt.


==Neue Funktionalität==
==Neue Funktionalität==


===Ausdrücke===
===Ausdrücke===
Es gibt nun eine Möglichkeit Ausdrücke zu definieren, welche nicht vom Evaluator ausgerechnet werden sollen.
Es gibt nun eine Möglichkeit, Ausdrücke zu definieren, welche nicht vom Evaluator ausgerechnet werden sollen. Siehe [[Evaluator#Ausrechnen von Ausdrücken verhindern|Evaluator → Ausrechnen von Ausdrücken verhindern]].
 
Ein Beispiel hierfür ist die Definition von Variablen für den Aufgabentext.
Hat man bisher <code>x+2*x</code> als Variable angelegt, wurde der Ausdruck zu <code>3*x</code> zusammengefasst.
 
Fügt man nun <code>[</code> und <code>]</code> ein, wird der Ausdruck nicht mehr ausgerechnet.
 
Bsp.:
 
* <code>x+3*x</code> -> LaTeX: <code>$4 \cdot x$</code>. Hier wird der Ausdruck ausgerechnet.
* <code>[x+3*x]</code> -> LaTeX: <code>$x+3 \cdot x$</code>. Hier wird der Ausdruck nicht ausgerechnet.
* <code>getFromList(0,list(x+3*x,[2*x+3*x]))</code> -> LaTeX: <code>$4 \cdot x$</code>. Hier wird der Ausdruck ausgerechnet.
* <code>getFromList(1,list(x+3*x,[2*x+3*x]))</code> -> LaTeX: <code>$2 \cdot x + 3 \cdot x$</code>. Hier wird der Ausdruck nicht ausgerechnet.
 
 
Die Variablen können allerdings trotzdem zur Bewertung der Aufgabe verwendet werden.
Sobald ein "gestoppter"-Ausdruck (von <code>[</code> und <code>]</code> umschlossen) in einer Funktion verwendet wird, wird diese ausgerechnet.
D.h. viel mehr, dass ein "gestoppter"-Ausdruck nur solange "gestoppt" ist, wie keine Funktion den Wert dieses "gestoppten"-Ausdrucks verwendet.
 
Bsp.:
 
* <code>3+[x+x]</code> -> LaTeX: <code>$2 \cdot x + 3$</code>. Da <code> [x+x]</code> Teil der Summe ist, wird er ausgerechnet.
* <code>[3+x+x]</code> -> LaTeX: <code>$3+x+x$</code>. Hier ist der Ausdruck selbst eine Summe. Da er hier aber kein Parameter einer weiteren Funktion ist, wird er nicht ausgerechnet.
* <code>varA=[3+x+x] varB=[var=varA]+3</code> -> LaTeX: <code>$2 \cdot x + 6$</code>. Hier ist <code>[3+x+x]</code> wieder Teil einer Summe und wird daher ausgerechnet.
* <code>varA=[3+x+x] varB=[[var=varA]+3]</code> -> LaTeX: <code>$3+x+x+3$</code>. Hier ist <code>[3+x+x]</code> zwar auch Teil einer Summe, da diese aber auch mit <code>[</code> und <code>]</code> umschlossen ist, wird der Ausdruck nicht ausgerechnet.
* <code>getFromList([1+1], list(1,2,3))</code> -> LaTeX: <code>3</code>. Hier ist <code>[1+1]</code> Teil einer Funktion, die den genauen Wert benötigt. Daher wird <code>[1+1]</code> berechnet.
 
===Variablen===


Ob Variablen in Texten mit LaTeX gerendert werden, kann nun bei der Einbindung mit einem <code>$</code>-Zeichen gesteuert werden: <code> [var=var1]</code> gibt einen einfachen Text zurück, <code> [var=$var1]</code> die LaTeX-Schreibweise. Die <code>$</code>-Zeichen, die den in LaTeX zu renderen Text einschließen müssen noch manuell hinzugefügt werden.
===Anzeige von Variablen===


Beispiele:
Siehe [[Variablen (JACK3)#Variablen in Texten einbetten|Variablen → Variablen in Texten einbetten]]. Die <code>$</code>-Zeichen, die den in LaTeX zu renderen Text einschließen, müssen noch manuell hinzugefügt werden.
 
{|class="wikitable"
!|Variablenwert</br>(was im Feld zu Variablenbelegung steht)
!|<code> [var=var1]</code>
!|<code> [var=$var1]</code>
|-
|sqrt(6)
|root[2](6)
|\sqrt{6}
|-
|'sqrt(6)'
|sqrt(6)
|\text{sqrt(6)}
|-
|5^2
|25
|25
|-
|'5^2'
|5^2
|\text{5^2}
|}


==Nicht mehr unterstützte Funktionen==
==Nicht mehr unterstützte Funktionen==
* <code>cosineDistance</code>
*<code>cosineDistance</code>
* <code>equalsSemiSem</code>
*<code>equalsSemiSem</code>
* <code>eval</code>
*<code>eval</code>
* <code>evalCplx</code>
*<code>evalCplx</code>
* <code>evalEq</code>
*<code>evalEq</code>
* <code>evalPolynomial</code>
* <code>evalPolynomial</code>
* <code>evalPolynomialCplx</code>
*<code>evalPolynomialCplx</code>
* <code>evalTermIn2Variables</code>
*<code>evalTermIn2Variables</code>
* <code>evaluateInSymja</code>
*<code>evaluateInSymja</code>
* <code>expand</code>
*<code>expand</code>
* <code>getFromOrderedList</code> wird durch <code>sortXList</code>, wobei <code>X</code> der Typ der Listenelemente ist (s. Neue Funktionen), und <code>getFromList</code> ersetzt. Mit <code>sortXList</code> wird die Liste sortiert und mit <code>getFromList</code> kann ein Element aus dieser Liste ausgewählt werden.
*<code>getFromOrderedList</code> wird durch <code>sortXList</code>, wobei <code>X</code> der Typ der Listenelemente ist (s. Neue Funktionen), und <code>getFromList</code> ersetzt. Mit <code>sortXList</code> wird die Liste sortiert und mit <code>getFromList</code> kann ein Element aus dieser Liste ausgewählt werden.
* <code>getFromOrderedSet</code>
*<code>getFromOrderedSet</code>
* <code>getFromSet</code>
*<code>getFromSet</code>


== Geänderte Funktionen ==
==Geänderte Funktionen==


* <code>[[ifthenelse]]</code>
*<code>[[ifthenelse]]</code>
** 0 wird zu ''falsch'' ausgewertet, 1 wird zu ''richtig'' ausgewertet.
**0 wird zu ''falsch'' ausgewertet, 1 wird zu ''richtig'' ausgewertet.
** Alle anderen Ergebnisse führen zu einem Fehler.
**Alle anderen Ergebnisse führen zu einem Fehler.  


* <code>[[convertToBinary]]</code>  
*<code>[[convertToBinary]]</code>  
** Wird in zwei Methoden aufgeteilt, <code>[[convertIntegerToBinaryString]]</code> (Ganzzahlen) und <code>[[convertDoubleToBinaryString]]</code> (Gleitkommazahlen).
** Wird in zwei Methoden aufgeteilt, <code>[[convertIntegerToBinaryString]]</code> (Ganzzahlen) und <code>[[convertDoubleToBinaryString]]</code> (Gleitkommazahlen).


* <code>[[equalsBinary]]</code>  
*<code>[[equalsBinary]]</code>  
** wird umbenannt in <code>[[equalsBinaryString]]</code>
**wird umbenannt in <code>[[equalsBinaryString]]</code>


== evaluateInSage und evaluateInR==
==evaluateInSage und evaluateInR==


Die beiden Funktionen <code>evaluateInSage</code> und <code>evaluateInR</code> werten die Eingabe direkt in einem CAS aus.
Die beiden Funktionen <code>evaluateInSage</code> und <code>evaluateInR</code> werten die Eingabe direkt in einem CAS aus.
Zeile 128: Zeile 71:
Wenn eine Variable in den Funktionen genutzt werden soll, kann diese, wie zuvor, innerhalb des CAS-Strings angegeben werden.
Wenn eine Variable in den Funktionen genutzt werden soll, kann diese, wie zuvor, innerhalb des CAS-Strings angegeben werden.


* <code>evaluateInSage("bool(1+[var=value2]==3)")</code> ist möglich
*<code>evaluateInSage("bool(1+[var=value2]==3)")</code> ist möglich
* <s><code>evaluateInSage(concat("bool(1+", [var=value2], "==3)")</code></s> ist '''nicht''' möglich
*<s><code>evaluateInSage(concat("bool(1+", [var=value2], "==3)")</code></s> ist '''nicht''' möglich


==Neue Funktionen==
==Neue Funktionen==
* <code>[[countTrue]]</code>
{{Hinweis|Diese Liste ist nicht vollständig. Zum aktuellen Zeitpunkt kommen zum JACK3-Evaluator laufend neue Funktionen hinzu. Diese sind im Wiki entsprechend gekennzeichnet.}}
** Nimmt beliebig viele Parameter entgegen und zählt, wie viele davon den Wert ''true()'' besitzen
*<code>[[countTrue]]</code>
**Nimmt beliebig viele Parameter entgegen und zählt, wie viele davon den Wert ''true()'' besitzen


*<code>[[equalList]]</code>
*<code>[[equalList]]</code>
** Vergleicht zwei Listen miteinander. Gibt ''true'' zurück, wenn beide die gleichen Elemente in der selben Reihenfolge beinhalten.
**Vergleicht zwei Listen miteinander. Gibt ''true'' zurück, wenn beide die gleichen Elemente in der selben Reihenfolge beinhalten.


*<code>[[convertIntegerToBinaryString]]</code>
*<code>[[convertIntegerToBinaryString]]</code>
** Erwartet Ganzzahl als Argument und wandelt diese in einen BinaryString(32Bit) um
**Erwartet Ganzzahl als Argument und wandelt diese in einen BinaryString(32Bit) um
 


*<code>[[convertBinaryStringToInteger]]</code>
*<code>[[convertBinaryStringToInteger]]</code>
** Erwartet einen BinaryString(32Bit) als Argument und wandelt diesen in eine Ganzzahl um
**Erwartet einen BinaryString(32Bit) als Argument und wandelt diesen in eine Ganzzahl um
 


*<code>[[convertDoubleToBinaryString]]</code>
*<code>[[convertDoubleToBinaryString]]</code>
** Erwartet eine Gleitkommazahl als Argument und wandelt diese in einen BinaryString(64Bit) um
**Erwartet eine Gleitkommazahl als Argument und wandelt diese in einen BinaryString(64Bit) um


*<code>[[convertBinaryStringToDouble]]</code>
*<code>[[convertBinaryStringToDouble]]</code>
** Erwartet einen BinaryString(64Bit) als Argument und wandelt diesen in eine Gleitkommazahl um
**Erwartet einen BinaryString(64Bit) als Argument und wandelt diesen in eine Gleitkommazahl um


*<code>[[equalsBinaryString]]</code>
*<code>[[equalsBinaryString]]</code>
** Erwartet zwei BinaryStrings als Argument und vergleicht diese
**Erwartet zwei BinaryStrings als Argument und vergleicht diese
 
 
*<code>[[isBinary]]</code>
** Erwartet Zeichenkette oder Ganzzahl als Argument. Prüft, ob es sich dabei um eine Binärzahl (nur 0 und 1) handelt.


*<code>[[isBinaryString]]</code>
**Erwartet Zeichenkette oder Ganzzahl als Argument. Prüft, ob es sich dabei um eine Binärzahl (nur 0 und 1) handelt.


Die folgenden Funktionen erwarten als Argument eine Liste und geben eine Liste zurück.
Die folgenden Funktionen erwarten als Argument eine Liste und geben eine Liste zurück.


* <code>sortDoubleList</code>  
*<code>sortDoubleList</code>  
** sortiert eine Liste, die nur Doubles/Floats oder Integers beinhaltet
**sortiert eine Liste, die nur Doubles/Floats oder Integers beinhaltet
** Ausgabe ist eine sortierte Liste mit Doubles/Floats
**Ausgabe ist eine sortierte Liste mit Doubles/Floats
* <code>sortIntegerList</code>
*<code>sortIntegerList</code>
** sortiert eine Liste, die nur Integers beinhaltet
**sortiert eine Liste, die nur Integers beinhaltet
** Ausgabe ist eine sortierte Liste mit Integers
**Ausgabe ist eine sortierte Liste mit Integers
* <code>sortLexicographical</code>
*<code>sortLexicographical</code>
** sortiert eine Liste, die nur Terminale beinhaltet (String/Double/Integer)
**sortiert eine Liste, die nur Terminale beinhaltet (String/Double/Integer)
** Ausgabe ist eine sortierte Liste mit '''Strings'''  
**Ausgabe ist eine sortierte Liste mit '''Strings'''
* <code>sortNumberList</code>
*<code>sortNumberList</code>
** sortiert eine Liste, die nur Terminale beinhaltet (Double/Integer)
**sortiert eine Liste, die nur Terminale beinhaltet (Double/Integer)
** Ausgabe ist eine sortierte Liste mit '''Doubles/Floats'''  
**Ausgabe ist eine sortierte Liste mit '''Doubles/Floats'''
* <code>sortStringList</code>
*<code>sortStringList</code>
** sortiert eine Liste, die nur Strings beinhaltet
**sortiert eine Liste, die nur Strings beinhaltet
** Ausgabe ist eine sortierte Liste mit '''Strings'''
**Ausgabe ist eine sortierte Liste mit '''Strings'''
* <code>convertToDoubleList</code>
*<code>convertToDoubleList</code>
**Elemente der Liste werden zu Double umgewandelt
**Elemente der Liste werden zu Double umgewandelt
* <code>convertToIntegerList</code>
*<code>convertToIntegerList</code>
** Elemente der Liste werden zu Integer umgewandelt
**Elemente der Liste werden zu Integer umgewandelt
* <code>convertToStringList</code>
*<code>convertToStringList</code>
** Elemente der Liste werden zu Strings umgewandelt
**Elemente der Liste werden zu Strings umgewandelt
* <code>removeDuplicates</code>
*<code>removeDuplicates</code>
** Alle Duplikate werden aus der Liste gelöscht
**Alle Duplikate werden aus der Liste gelöscht
* <code>shuffleList</code>
*<code>shuffleList</code>
** Die Elemente der Liste werden geshuffelt
**Die Elemente der Liste werden geshuffelt


==Division==
== Division==
Division wird nicht mehr automatisch gerundet. Soll der Bruch als Dezimalzahl ausgegeben werden, kann die Funktion <code>round()</code> genutzt werden.
Division wird nicht mehr automatisch gerundet. Soll der Bruch als Dezimalzahl ausgegeben werden, kann die Funktion <code>round()</code> genutzt werden.


Zeile 195: Zeile 135:
Wenn <code>:</code> und <code>/</code> hingegen '''in Zeichenketten''' genutzt werden, werden diese unterschiedlich dargestellt:
Wenn <code>:</code> und <code>/</code> hingegen '''in Zeichenketten''' genutzt werden, werden diese unterschiedlich dargestellt:


* <code>:</code> sowie die Funktion <code>divide()</code> wird als <code>\div</code> in LaTeX konvertiert -> <math>3\div4</math>
*<code>:</code> sowie die Funktion <code>divide()</code> wird als <code>\div</code> in LaTeX konvertiert -> <math>3\div4</math>
* <code>/</code> sowie die Funktion <code>rational()</code> wird als <code>\frac{}{}</code> in LaTeX konvertiert -> <math>\frac{3}{4}</math>
*<code>/</code> sowie die Funktion <code>rational()</code> wird als <code>\frac{}{}</code> in LaTeX konvertiert -> <math>\frac{3}{4}</math>


==Runden von Ergebnissen==
==Runden von Ergebnissen==
Zeile 202: Zeile 142:
Ergebnisse werden nicht mehr vom Evaluator gerundet. Stattdessen werden die Ergebnisse genau angegeben. Bsp.: <code>exp(2)</code> wird zu <code>e^2</code> evaluiert.
Ergebnisse werden nicht mehr vom Evaluator gerundet. Stattdessen werden die Ergebnisse genau angegeben. Bsp.: <code>exp(2)</code> wird zu <code>e^2</code> evaluiert.


Soll das Ergebnis als Zahl angegeben werden, muss eine Funktion zum Runden genutzt werden. Bsp.: <code> round(), ceil(), floor(),...</code>
Soll das Ergebnis als Zahl angegeben werden, muss eine Funktion zum Runden genutzt werden. Beispiele: <code> round(), ceil(), floor(),...</code>
 
Auch über die [[Variablensetzung Syntax Flag (JACK3)|Syntax-Flags zur Variablenersetzung]] ist es möglich, die Anzahl an Rundungsstellen zu definieren oder eine wissenschaftliche Schreibweise wie \(5 \cdot 10^{3}\) zu nutzen.


==Kleine Änderungen==
==Kleine Änderungen==
* <code>[[constE]]</code>
*<code>[[constE]]</code> als <code>constE()</code> benutzbar
** als <code>constE()</code> benutzbar
*<code>[[constPi]]</code> als <code>constPi()</code> benutzbar
* <code>[[constPi]]</code>
*<code>[[IEEERemainder]]</code> als <code>iEEERemainder(...)</code> benutzbar
** als <code>constPi()</code> benutzbar
* <code>[[IEEERemainder]]</code>
** als <code>iEEERemainder(...)</code> benutzbar


[[Kategorie:Benutzerhandbuch]]
[[Kategorie:JACK3]]
[[Kategorie:JACK3]]

Aktuelle Version vom 9. September 2024, 11:16 Uhr

In JACK3 wird eine neue Evaluatorversion genutzt. Im Folgenden sind die Unterschiede zur alten Version unter JACK2 aufgelistet.

Zeichenketten/Strings

Zeichenketten/Strings können in der Syntax mit einfachen (') oder doppelten Anführungszeichen (") verwendet werden. Eine Benutzung der jeweils anderen ist dann ohne Escaping \" \' möglich.

Achtung! Das Escaping wird nicht vom Evaluator aufgelöst!

Beispiele:

  • "Dies ist ein 'Beispiel'."
  • 'Dies ist ein anderes "Beispiel".'
  • "Dies ist ein drittes \"Beispiel\"."
  • 'Dies ist ein letztes \'Beispiel\'.'

Zeichenketten werden nicht mehr vom Evaluator zerlegt und interpretiert. Das heißt, die Ersetzung von Variablen mit ihren zugehörigen Werten in Zeichenketten geschieht nicht mehr automatisch.

Beispiel: In "Die Ersetzung von Variablen [var=text1] wird nicht mehr automatisch vorgenommen." wird [var=text1] nicht ersetzt.

Mit der Funktion concat() können Variablenwerte aber mit einer oder mehreren Zeichenketten verknüpft werden:

Beispiel: In concat("Die Ersetzung von Variablen ", [var=text1], " kann so vorgenommen werden.") wird [var=text1] durch ihren Wert ersetzt.

Nutzt man in equalsExpr() Anführungszeichen, wird alles in den Anführungszeichen als Text erkannt. Lässt man die Anführungszeichen weg, wird alles als mathematischer Ausdruck erkannt.

Beispiele:

  • equalsExpr('x^2+3', [input=gleichung]) -> x^2+3 wird als Text, nicht als mathematischer Ausdruck erkannt.
  • equalsExpr(x^2+3, [input=gleichung]) -> x^2+3 wird als mathematischer Ausdruck erkannt.

Neue Funktionalität

Ausdrücke

Es gibt nun eine Möglichkeit, Ausdrücke zu definieren, welche nicht vom Evaluator ausgerechnet werden sollen. Siehe Evaluator → Ausrechnen von Ausdrücken verhindern.

Anzeige von Variablen

Siehe Variablen → Variablen in Texten einbetten. Die $-Zeichen, die den in LaTeX zu renderen Text einschließen, müssen noch manuell hinzugefügt werden.

Nicht mehr unterstützte Funktionen

  • cosineDistance
  • equalsSemiSem
  • eval
  • evalCplx
  • evalEq
  • evalPolynomial
  • evalPolynomialCplx
  • evalTermIn2Variables
  • evaluateInSymja
  • expand
  • getFromOrderedList wird durch sortXList, wobei X der Typ der Listenelemente ist (s. Neue Funktionen), und getFromList ersetzt. Mit sortXList wird die Liste sortiert und mit getFromList kann ein Element aus dieser Liste ausgewählt werden.
  • getFromOrderedSet
  • getFromSet

Geänderte Funktionen

  • ifthenelse
    • 0 wird zu falsch ausgewertet, 1 wird zu richtig ausgewertet.
    • Alle anderen Ergebnisse führen zu einem Fehler.

evaluateInSage und evaluateInR

Die beiden Funktionen evaluateInSage und evaluateInR werten die Eingabe direkt in einem CAS aus.

Der Inhalt der Funktionen ist immer ein String/Zeichenkette. Auch darf die Eingabe nicht verschachtelte Funktionen beinhalten. Sie wird nicht geparsed und nicht evaluiert.

Wenn eine Variable in den Funktionen genutzt werden soll, kann diese, wie zuvor, innerhalb des CAS-Strings angegeben werden.

  • evaluateInSage("bool(1+[var=value2]==3)") ist möglich
  • evaluateInSage(concat("bool(1+", [var=value2], "==3)") ist nicht möglich

Neue Funktionen

Hinweis: Diese Liste ist nicht vollständig. Zum aktuellen Zeitpunkt kommen zum JACK3-Evaluator laufend neue Funktionen hinzu. Diese sind im Wiki entsprechend gekennzeichnet.

  • countTrue
    • Nimmt beliebig viele Parameter entgegen und zählt, wie viele davon den Wert true() besitzen
  • equalList
    • Vergleicht zwei Listen miteinander. Gibt true zurück, wenn beide die gleichen Elemente in der selben Reihenfolge beinhalten.
  • isBinaryString
    • Erwartet Zeichenkette oder Ganzzahl als Argument. Prüft, ob es sich dabei um eine Binärzahl (nur 0 und 1) handelt.

Die folgenden Funktionen erwarten als Argument eine Liste und geben eine Liste zurück.

  • sortDoubleList
    • sortiert eine Liste, die nur Doubles/Floats oder Integers beinhaltet
    • Ausgabe ist eine sortierte Liste mit Doubles/Floats
  • sortIntegerList
    • sortiert eine Liste, die nur Integers beinhaltet
    • Ausgabe ist eine sortierte Liste mit Integers
  • sortLexicographical
    • sortiert eine Liste, die nur Terminale beinhaltet (String/Double/Integer)
    • Ausgabe ist eine sortierte Liste mit Strings
  • sortNumberList
    • sortiert eine Liste, die nur Terminale beinhaltet (Double/Integer)
    • Ausgabe ist eine sortierte Liste mit Doubles/Floats
  • sortStringList
    • sortiert eine Liste, die nur Strings beinhaltet
    • Ausgabe ist eine sortierte Liste mit Strings
  • convertToDoubleList
    • Elemente der Liste werden zu Double umgewandelt
  • convertToIntegerList
    • Elemente der Liste werden zu Integer umgewandelt
  • convertToStringList
    • Elemente der Liste werden zu Strings umgewandelt
  • removeDuplicates
    • Alle Duplikate werden aus der Liste gelöscht
  • shuffleList
    • Die Elemente der Liste werden geshuffelt

Division

Division wird nicht mehr automatisch gerundet. Soll der Bruch als Dezimalzahl ausgegeben werden, kann die Funktion round() genutzt werden.

Es besteht bei der Berechnung kein Unterschied zwischen der Nutzung von : und /.

Wenn : und / hingegen in Zeichenketten genutzt werden, werden diese unterschiedlich dargestellt:

  • : sowie die Funktion divide() wird als \div in LaTeX konvertiert -> <math>3\div4</math>
  • / sowie die Funktion rational() wird als \frac{}{} in LaTeX konvertiert -> <math>\frac{3}{4}</math>

Runden von Ergebnissen

Ergebnisse werden nicht mehr vom Evaluator gerundet. Stattdessen werden die Ergebnisse genau angegeben. Bsp.: exp(2) wird zu e^2 evaluiert.

Soll das Ergebnis als Zahl angegeben werden, muss eine Funktion zum Runden genutzt werden. Beispiele: round(), ceil(), floor(),...

Auch über die Syntax-Flags zur Variablenersetzung ist es möglich, die Anzahl an Rundungsstellen zu definieren oder eine wissenschaftliche Schreibweise wie \(5 \cdot 10^{3}\) zu nutzen.

Kleine Änderungen