Zum Inhalt springen
Varlig-Handbuch
Varlig-Startseite

Listen und Statistik

Eine Liste hält mehrere Werte unter einem Namen zusammen, etwa die Schrittzahlen einer Woche, eine Reihe von Klausurpunkten oder die Kassenbons eines Monats. Stehen die Werte erst in einer Liste, kannst du sie summieren, ihren Durchschnitt bilden, messen, wie stark sie streuen, und die wichtigen herausgreifen.

Auf dieser Seite geht es darum, Listen zu schreiben und zu indizieren, um Kennzahlen, um das Addieren der Zeilen darüber, um das Beschriften von Zeilen mit Tags, damit du sie aufsummieren kannst, wo immer sie stehen, um Sortieren und Ausschneiden, um das Umformen einer Liste mit map und filter und um Rechnen mit ganzen Listen. Sie hilft dir immer dann, wenn du eine Spalte voller Zahlen zusammenfassen willst. Listen aus Zeilen können auch als Matrizen dienen, die eine eigene Seite haben.

Eine Liste schreiben

Schreib die Werte in eckige Klammern, getrennt durch Kommas:

calc
Punkte = [72, 85, 91, 64, 88] ergibt [72, 85, 91, 64, 88]
Punkte[0] ergibt 72
Punkte[4] ergibt 88
length(Punkte) ergibt 5

Die Position eines Werts in der Liste ist sein Index, den du in eckigen Klammern hinter die Liste schreibst. Indizes beginnen bei null, Punkte[0] ist also das erste Ergebnis und Punkte[4] das fünfte. Das letzte Element steht immer bei length(Punkte) - 1. Ein negativer, gebrochener oder zu großer Index ist ein Fehler; Indizes zählen nicht vom Ende her weiter.

Elemente können Rechnungen, Größen mit Einheiten oder andere Listen sein:

calc
[2 * 45, 60 + 15] ergibt [90, 75]
[1.5 kg, 750 g] ergibt [1.5 kg, 750 g]
[[1, 2], [3, 4]][1][0] ergibt 3

Bei verschachtelten Listen wählt der erste Index die innere Liste und der zweite einen Wert daraus: [1] wählt [3, 4], dann wählt [0] die 3.

Tausendertrennzeichen funktionieren auch innerhalb einer Liste, du kannst Zahlen also so einsetzen, wie sie geschrieben sind. Setz nach jedem Komma zwischen zwei Werten ein Leerzeichen; ein Komma, auf das drei Ziffern folgen, bleibt Teil der Zahl:

calc
Gehälter = [£32,000, £41,500, £38,250] ergibt [£32,000.00, £41,500.00, £38,250.00]
average(Gehälter) ergibt £37,250.00

Worauf du achten solltest:

  • Ohne Leerzeichen trennt jedes Komma, [8200,10400] hat also zwei Werte. Eine Liste wie [100,200,300] kann eine Zahl oder drei sein, deshalb zeigt Varlig einen Fehler an, der beide Schreibweisen nennt.
  • Ergebnisse zeigen Tausendertrennzeichen und nach jedem Komma ein Leerzeichen, [8,200, 10,400] ist also eine Liste mit zwei Werten.
  • Eine Liste enthält höchstens 1.024 Werte.

Kennzahlen

calc
Punkte = [72, 85, 91, 64, 88]
sum(Punkte) ergibt 400
average(Punkte) ergibt 80
median(Punkte) ergibt 85
min(Punkte) ergibt 64
max(Punkte) ergibt 91
count(Punkte) ergibt 5

mean und avg sind andere Namen für average, total für sum, stdev für stddev und count für length, Gewohnheiten aus Tabellenkalkulationen funktionieren also weiter. product multipliziert die Werte miteinander. Für den häufigsten Wert, ein Perzentil oder ein Quartil siehe weiter unten.

Bei einer benannten Liste kannst du die Kennzahl auch in Worten schreiben:

calc
Punkte = [72, 85, 91, 64, 88]
average of Punkte ergibt 80
total of Punkte ergibt 400

sum of, mean of, median of, min of, max of und count of funktionieren genauso. Schreib nach of einen Namen oder die Werte selbst, getrennt durch Kommas, mit oder ohne runde Klammern. Für Werte in eckigen Klammern nimm die Funktionsschreibweise, wie in average([72, 85, 91]).

Die meisten Kennzahlen, darunter sum, product, average, median, min, max, count und stddev, akzeptieren statt einer Liste auch einzelne Werte:

calc
max(72, 85, 91) ergibt 91
sum(1, 2, 3, 4) ergibt 10
average of 70, 85, 91 ergibt 82
mean of (1,2,3) ergibt 2
average(1,200, 1,800) ergibt 1,500

Die Zeilen darüber addieren

Eine Zeile, in der nur sum, total, subtotal, grand total, average, max oder min steht, ermittelt diese Kennzahl für die Ergebnisse darüber. Sie deckt ihren eigenen Abschnitt ab, der bei der vorherigen Summenzeile, einer Trennlinie --- oder einer Überschrift mit # beginnt. So bekommt jeder Teil einer Notiz schon beim Tippen seine eigene Kennzahl. Das funktioniert wie die Option Teilsumme im Kontextmenü einer Zeile:

calc
# Lebensmittel
Brot = £1.20
Milch = £1.45
Eier = £2.30
total ergibt £4.95
# Haushalt
Müllbeutel = £3.50
Spülmittel = £1.80
total ergibt £5.30

Das Wort darf eine Beschriftung tragen, einen eigenen Namen bekommen, das Ergebnis umrechnen oder einen Kommentar hinter sich haben, damit sich die Zeile wie der Rest deiner Notiz liest:

calc
Karten = 64 €
Bahn = 41.20 €
Geschätzte Summe: total ergibt €105.20

Schätzung = total speichert die Zahl unter einem Namen, und total // noch zu buchen setzt eine Notiz daneben. total in kg rechnet vor der Anzeige um, was praktisch ist, wenn ein Abschnitt Gramm und Kilogramm mischt. Ein Kennzahlwort neben einem Operator ist die Zahl, die seine eigene Zeile zeigen würde, 5 € + subtotal addiert also einen Fünfer zur laufenden Summe.

calc
# Pakete
12 kg ergibt 12 kg
4 kg ergibt 4 kg
850 g ergibt 850 g
total in kg ergibt 16.85 kg
max ergibt 12 kg

Hast du einem Wert den Namen sum oder total gegeben, zeigt die Zeile stattdessen deinen Wert. Steht darüber nichts, womit sich rechnen lässt, meldet die Zeile Unsupported: no amounts above to add up, statt leer zu bleiben oder eine Null zu zeigen. Meist liegt dann eine Überschrift dazwischen, an die du nicht mehr gedacht hast.

Jeder Betrag zählt genau einmal. Rechnet eine spätere Zeile im Abschnitt etwas aus einem benannten Betrag aus, zählt die Summe diese Zeile statt beider. Eine Einkaufsliste aus Stückpreisen und Mengen ergibt also das, was du tatsächlich zahlst:

calc
Hemd = 18.50 € ergibt €18.50
Shorts = 9 € ergibt €9.00
9 * Hemd ergibt €166.50
10 * Shorts ergibt €90.00
Gebühr = 40 € ergibt €40.00
MwSt = Gebühr * 20% ergibt €8.00
total ergibt €304.50

Hemd und Shorts zählen innerhalb der beiden Zeilen, die sie verwenden, während Gebühr in der Summe bleibt, weil MwSt nur einen Anteil davon nimmt.

Das folgt einer Kette von Namen, so weit sie reicht. Teilt eine Notiz einen Betrag in Anteile auf und addiert die Anteile dann wieder, zählt die Zeile, die sie addiert, und ebenso der Betrag, von dem sie Anteile waren:

calc
Topf = 900 € ergibt €900.00
erster = 50% of Topf ergibt €450.00
zweiter = 30% of Topf ergibt €270.00
dritter = 20% of Topf ergibt €180.00
erster + zweiter + dritter ergibt €900.00
total ergibt €900.00

Addiert wird nur Gleichartiges. Prozentsätze, Raten und reine Anzahlen bleiben draußen, wenn darüber Geld oder eine Menge steht, und eine Zeile mit einem Fehler ebenfalls. Reine Zahlen, die als Spalte eingefügt sind, werden addiert, wenn sie wie die Beträge auf den Cent genau geschrieben sind; eine Zahl mit mehr Nachkommastellen, etwa ein Wechselkurs oder ein Faktor, bleibt draußen. Der Hinweis an der Summe nennt alles, was sie ausgelassen hat, etwa „Leaves out line 3 (Personen = 2)“ oder „Leaves out line 2 (an error)“. So siehst du auf einen Blick, was in der Zahl steckt.

Eine Liste aus zwei oder mehr Beträgen ohne Namen, direkt über der Summe und unter einer Zeile, die aus Namen berechnet ist, wird für sich addiert. So zählt ein Budget am Anfang der Notiz nicht noch einmal in der Liste darunter mit:

calc
Budget = 18,000 € ergibt €18,000.00
Rest = Budget - 6,388.25 € ergibt €11,611.75
- Container 250 € ergibt €250.00
- Grundreinigung 120 € ergibt €120.00
subtotal ergibt €370.00

Um Zeilen zu summieren, die nicht nebeneinanderstehen, beschriftest du sie stattdessen mit einem Tag.

Die häufigsten Werte

mode liefert den Wert, der öfter vorkommt als jeder andere, und modes liefert als Liste alle Werte, die gleich häufig ganz vorn liegen:

calc
Noten = [3, 4, 4, 5, 5, 5, 6]
mode(Noten) ergibt 5
modes([1, 1, 2, 2, 3]) ergibt [1, 2]

mode antwortet nur, wenn genau ein Wert der häufigste ist. Wiederholt sich nichts oder liegen mehrere Werte gleichauf, sagt es das, statt sich einen herauszupicken:

calc
mode([1, 2, 3]) ergibt Unsupported: No value repeats, so this list has no mode; use median or average instead

Perzentile und Quartile

percentile(Liste, Rang) nimmt einen Rang von 0 bis 100 und liefert den Wert an dieser Stelle, wobei es zwischen den beiden nächstgelegenen Beobachtungen interpoliert. quartile(Liste, k) ist dasselbe in Vierteln, mit k von 0 bis 4, quartile(Liste, 1) ist also percentile(Liste, 25):

calc
Punkte = [72, 85, 91, 64, 88]
percentile(Punkte, 50) ergibt 85
percentile(Punkte, 25) ergibt 72
quartile(Punkte, 3) ergibt 88
quartile(Punkte, 4) ergibt 91
percentile([1, 2, 3, 4], 25) ergibt 1.75
quartile([1, 2, 3, 4], 3) ergibt 3.25

Das 50. Perzentil ist der Median, und das 0. und das 100. — quartile(Liste, 0) und quartile(Liste, 4) — sind der kleinste und der größte Wert, genau wie min und max. Ein Rang außerhalb seines Bereichs ist ein Fehler und nicht der nächstgelegene Wert, der noch passen würde:

calc
percentile([1, 2, 3, 4], 101) ergibt Unsupported: A percentile is between 0 and 100
quartile([1, 2, 3, 4], 5) ergibt Unsupported: A quartile is 0, 1, 2, 3 or 4

Streuung: Varianz und Standardabweichung

calc
Punkte = [72, 85, 91, 64, 88]
variance(Punkte) ergibt 132.5
stddev(Punkte) to 1 dp ergibt 11.5

Beides sind Stichproben-Kennzahlen: Sie teilen durch die Anzahl der Werte minus eins (n - 1), die übliche Wahl, wenn deine Zahlen eine Stichprobe aus etwas Größerem sind. Sie brauchen mindestens zwei Werte. Hänge to 1 dp an eine beliebige Kennzahl an, um sie zu runden.

Ist deine Liste die gesamte Grundgesamtheit statt einer Stichprobe, nimm die Formen für die Grundgesamtheit, die durch n teilen und nur einen Wert brauchen:

calc
# Zugverspätungen in Minuten
Verspätungen = [2, 4, 4, 4, 5, 5, 7, 9]
sample_variance(Verspätungen) ergibt 4.5714285714
population_variance(Verspätungen) ergibt 4
sample_stddev(Verspätungen) ergibt 2.1380899353
population_stddev(Verspätungen) ergibt 2
Aufruf Teilt die quadrierten Abweichungen durch Braucht
variance, sample_variance n - 1 Zwei Werte
population_variance n Einen Wert
stddev, stdev, sample_stddev n - 1 Zwei Werte
population_stddev n Einen Wert

sample_variance und sample_stddev sind längere Namen für variance und stddev, du kannst also ausschreiben, welche du meinst. Die kurzen Namen waren immer schon die Stichprobenformen und sind es weiterhin.

Listen mit Einheiten

sum, average, median, mode, modes, percentile, quartile, min, max, stddev und population_stddev behalten Einheiten bei und rechnen zwischen kompatiblen Einheiten um. Die Werte werden in der Einheit des ersten gelesen, und in ihr kommt das Ergebnis zurück:

calc
Arbeitswege = [24 min, 31 min, 27 min, 22 min]
sum(Arbeitswege) ergibt 1 hour 44 min
average(Arbeitswege) ergibt 26 min
median(Arbeitswege) ergibt 25.5 min
percentile(Arbeitswege, 25) ergibt 23.5 min
population_stddev(Arbeitswege) ergibt 3.3911649916 min
sum([1 kg, 500 g]) ergibt 1.5 kg
modes([1 kg, 500 g, 1 kg, 500 g]) ergibt [0.5 kg, 1 kg]

Die Varianzen sind die Ausnahme: Sie quadrieren ihre Beobachtungen, und keine Einheit übersteht das, deshalb nehmen sie nur reine Zahlen.

calc
sample_variance([1 kg, 2 kg]) ergibt Unsupported: A variance squares its observations, so it takes plain numbers; use stddev for amounts with a unit

Auch sort funktioniert nur mit reinen Zahlen. Eine Kennzahl über Werte mit inkompatiblen Einheiten, etwa sum([1 kg, 3 m]), führt zu einem Fehler, statt stillschweigend Werte auszulassen.

Die Regeln zur Exaktheit hinter all dem stehen unter Was der Rechner garantiert.

Leere Listen

Aufruf mit einer leeren Liste Ergebnis
sum([]) 0
product([]) 1
count([]), length([]) 0
average([]), median([]), min([]), max([]) Fehler
variance([]), stddev([]) Fehler

Eine leere Liste entsteht meistens durch ein filter, auf das nichts zutraf, deshalb kann ein average über eine gefilterte Liste fehlschlagen, auch wenn die ursprüngliche Liste Werte enthält.

Tags

Ein Tag ist eine # mit einem direkt angehängten Wort, etwa #essen. Schreib ihn irgendwo in eine Zeile, um sie zu beschriften. Der Tag nimmt an der Rechnung nicht teil, die Zeile zeigt also weiter ihr eigenes Ergebnis, und er gruppiert sie mit jeder anderen Zeile, die denselben Tag trägt. total of #essen addiert diese Zeilen dann:

calc
12.50 € Mittagessen #essen ergibt €12.50
8 € Kaffee #essen ergibt €8.00
Flüge = 420 € #reise ergibt €420.00
total of #essen ergibt €20.50

Genau das kann ein Tag, was eine Zwischensumme nicht kann: Die Zeilen müssen nicht nebeneinanderstehen. Eine Woche Ausgaben, eine Reise und eine Einkaufsliste passen in einen Block, jede mit ihrer eigenen Zahl am Ende. Halt den Zeiger über einen Tag, um zu sehen, worauf er sich bisher summiert.

Jede Kennzahl funktioniert mit einem Tag. of ist optional, der Tag darf vor oder hinter dem Wort stehen, und das Ergebnis nimmt eine Beschriftung oder einen eigenen Namen an, wie jede andere Zeile auch:

calc
#essen 12.50 € ergibt €12.50
#essen 8 € ergibt €8.00
420 € #reise ergibt €420.00
total of #essen ergibt €20.50
average of #essen ergibt €10.25
count of #essen ergibt 2
min of #essen ergibt €8.00
max of #essen ergibt €12.50
#essen total ergibt €20.50
Essen diese Woche: sum of #essen ergibt €20.50
gegessen = avg #essen ergibt €10.25

sum, total, average, avg, mean, count, min und max lesen sich alle so.

Eine Tag-Kennzahl steht dort, wo auch ein Betrag steht, eine Rechnung kann also von ihr aus weitergehen. So ziehst du eine Anzahlung von einer laufenden Summe ab, rechnest sie hoch oder stellst zwei Tags gegeneinander:

calc
20 € Einkauf #essen ergibt €20.00
30 € Restaurant #essen ergibt €30.00
total of #essen - 10 € ergibt €40.00
2 * total of #essen ergibt €100.00
Küchenausstattung: total of #essen ergibt €50.00

Eine Zeile darf so viele Tags tragen, wie du willst, und jeder zählt sie. Nennst du zwei Tags in einer Formulierung, bekommst du die Zeilen, die beide tragen:

calc
50 € Abendessen #reise #essen ergibt €50.00
30 € Taxi #reise ergibt €30.00
9 € Sandwich #essen ergibt €9.00
total of #reise ergibt €80.00
total of #essen ergibt €59.00
total of #reise #essen ergibt €50.00

Was eine Tag-Summe abdeckt

Eine Tag-Formulierung sieht sich genau dieselben Zeilen an wie ein einfaches total und folgt denselben Regeln:

  • Sie deckt ihren eigenen Abschnitt ab, zurück bis zur vorherigen Summe, einer Trennlinie --- oder einer Überschrift mit #.
  • Sie addiert nur Gleichartiges. Prozentsätze, Raten, reine Anzahlen und Zeilen mit Fehlern bleiben draußen, und der Hinweis nennt sie, etwa „Leaves out line 2 (Personen = 2)“.
  • Jeder Betrag zählt genau einmal: Ein getaggter Preis, den eine spätere getaggte Zeile multipliziert, zählt in dieser Zeile statt in beiden.

Eine Überschrift genügt also, um das #essen der einen Woche von dem der nächsten zu trennen:

calc
# Woche 1
20 € Mittagessen #essen ergibt €20.00
total of #essen ergibt €20.00
# Woche 2
30 € Mittagessen #essen ergibt €30.00
total of #essen ergibt €30.00

Gibt es nichts zu addieren, sagt die Zeile das, statt leer zu bleiben oder eine Null zu zeigen. Meist steckt dann ein Tippfehler im Tag oder eine vergessene Überschrift dahinter:

calc
12.50 € Mittagessen #essen ergibt €12.50
total of #getraenke ergibt Unsupported: no lines tagged #getraenke above
Klempner anrufen #aufgaben
total of #aufgaben ergibt Unsupported: no amounts tagged #aufgaben above

Tag-Namen schreiben

Ein Tag-Name darf Buchstaben, Ziffern, _, - und / enthalten, #q1-2026 und #reise/lissabon sind also je ein Name. Groß- und Kleinschreibung spielt keine Rolle:

calc
20 € Flug #reise/lissabon ergibt €20.00
35 € Hotel #Reise/Lissabon ergibt €35.00
total of #reise/lissabon ergibt €55.00

Eine #, die nicht an einem Wort hängt, behält ihre alte Bedeutung, an dem, was du schon schreibst, ändert sich also nichts:

Du schreibst Was es ist
# Wocheneinkauf Ein Kommentar, wegen des Leerzeichens nach der Raute
5 + 5 # Kommentar Dasselbe: Alles nach der Raute wird ignoriert
C#4 in Hz Ein musikalisches Kreuz, weil die Raute am Notenbuchstaben hängt
#1, Rechnung #123 Eine Nummer, kein Tag: Ein Tag-Name beginnt nicht mit einer Ziffer
#ff0000, #fff Ein Farbcode
varlig.app/docs#tags Eine Webadresse mit Anker

Ein Tag-Name muss mit einem Buchstaben beginnen, und drei, vier, sechs oder acht Hexadezimalziffern nach der Raute werden als Farbe gelesen. #fee ist also eine Farbe, #fees ein Tag.

Tags in einer Notiz und Tags in einem Block

Die Tags, die deine Notizen in der Seitenleiste ordnen, sind unter Tags, Links und Backlinks beschrieben. Sie enden am Rand eines Rechenblocks: Ein #essen, das du im Block schreibst, beschriftet die Zeile für ihre Summe und taucht nie in der Seitenleiste auf, und ein #essen in der Notiz um den Block herum ordnet die Notiz ein, ohne deine Rechnungen anzufassen. Schreib den Tag an beide Stellen, wenn du beides willst, und beachte den einen Unterschied: Ein Tag in einer Notiz darf Leerzeichen enthalten, wenn du ihn mit einer zweiten # abschließt, während ein Tag in einem Rechenblock immer am ersten Leerzeichen endet.

Listenreferenz

Aufruf Was er macht
range(Start,Ende) Ganze Zahlen von Start bis Ende, beide Enden eingeschlossen
range(Start,Ende,Schritt) Zählt in Schritten von Schritt, auch negativ oder gebrochen, aber nicht null
length(Liste), count(Liste) Anzahl der Werte
sort(Liste) Vom kleinsten zum größten Wert; nur reine Zahlen
reverse(Liste) Dieselben Werte in umgekehrter Reihenfolge; beliebige Werte
unique(Liste) Behält das erste Vorkommen jedes Werts
slice(Liste,Start,Ende) Werte ab Index Start bis ausschließlich Index Ende
map(Ausdruck,Variable,Liste) Berechnet den Ausdruck einmal für jeden Wert
filter(Bedingung,Variable,Liste) Behält die Werte, für die die Bedingung true ist
calc
range(1, 5) ergibt [1, 2, 3, 4, 5]
range(0, 100, 25) ergibt [0, 25, 50, 75, 100]
range(10, 0, -2) ergibt [10, 8, 6, 4, 2, 0]
Punkte = [72, 85, 91, 64, 88]
sort(Punkte) ergibt [64, 72, 85, 88, 91]
reverse(sort(Punkte)) ergibt [91, 88, 85, 72, 64]
slice(sort(Punkte), 0, 3) ergibt [64, 72, 85]
unique([4, 2, 4, 6, 2]) ergibt [4, 2, 6]

reverse(sort(…)) liefert den größten Wert zuerst, und slice(sort(…), 0, 3) greift die drei niedrigsten heraus.

Für die Grenzen von slice muss 0 <= Start <= Ende <= Länge gelten. Sind Start und Ende gleich, entsteht eine leere Liste. Eine Kurzform wie Punkte[0:2] gibt es nicht; schreib slice(Punkte, 0, 2).

unique vergleicht Werte genau so, wie sie gespeichert sind, 1 kg und 1000 g zählen also als zwei verschiedene Werte, und zwei Ergebnisse, die sich in der zehnten Nachkommastelle unterscheiden, werden nicht zusammengefasst.

Map und filter

map berechnet einen Ausdruck für jeden Wert einer Liste. filter behält die Werte, die eine Prüfung bestehen. In beiden Fällen kommt zuerst der Ausdruck, dann ein Name, der für jeden einzelnen Wert steht, dann die Liste:

calc
Punkte = [72, 85, 91, 64, 88]
map(s + 5, s, Punkte) ergibt [77, 90, 96, 69, 93]
filter(s >= 80, s, Punkte) ergibt [85, 91, 88]
count(filter(s >= 80, s, Punkte)) ergibt 3
average(filter(s >= 80, s, Punkte)) ergibt 88

Lies filter(s >= 80, s, Punkte) als „die Werte s in Punkte, für die s >= 80 gilt“. Beide funktionieren mit Einheiten und Geld:

calc
map(p * 1.2, p, [£10, £25, £40]) ergibt [£12.00, £30.00, £48.00]
Ausgaben = [£42.50, £18.20, £65.00, £23.30]
filter(x > £30, x, Ausgaben) ergibt [£42.50, £65.00]
sum(filter(x > £30, x, Ausgaben)) ergibt £107.50

Der gewählte Name existiert nur innerhalb des Aufrufs. Er ändert keinen gleichnamigen Wert an anderer Stelle der Notiz:

calc
x = 10
map(x * 2, x, [1, 2, 3]) ergibt [2, 4, 6]
x ergibt 10

Die Bedingung in filter muss ein Vergleich oder ein anderer Wahrheitswert sein. Eine reine Zahl gilt nicht als wahr, filter(x, x, [0, 1, 2]) ist also ein Fehler. Eine leere Liste mit map oder filter zu bearbeiten ergibt eine leere Liste.

Rechnen mit Listen

Du kannst jeden Wert mit einer einzelnen Zahl multiplizieren oder durch sie teilen und zwei gleich lange Listen Wert für Wert addieren oder subtrahieren:

calc
[30, 36, 22] / 40 * 100 ergibt [75, 90, 55]
2 * [3, 1, 4] ergibt [6, 2, 8]
-[5, -3] ergibt [-5, 3]
Probeklausur = [62, 70, 60]
Klausur = [72, 78, 69]
Klausur - Probeklausur ergibt [10, 8, 9]
average(Klausur - Probeklausur) ergibt 9
[1 kg, 2 kg] + [500 g, 500 g] ergibt [1.5 kg, 2.5 kg]
[72, 85] == [72, 85] ergibt true

Die erste Zeile macht aus Punkten von maximal 40 Prozentwerte. Die Zeile Klausur - Probeklausur stellt das Ergebnis der Probeklausur jeder Person ihrem Klausurergebnis gegenüber.

Einige Operationen werden bei Listen nicht unterstützt:

  • Eine einzelne Zahl zu einer Liste addieren, wie in Punkte + 5. Nimm stattdessen map(s + 5, s, Punkte).
  • Listen unterschiedlicher Länge addieren. Werte werden nie wiederholt, um die Längen anzugleichen.
  • Zwei flache Listen mit * multiplizieren. Für die Summe der paarweisen Produkte nimm dot: dot([2, 3, 1], [4, 5, 10]) ist 33, etwa zwei Kaffee zu je 4, drei Tee zu je 5 und ein Stück Kuchen zu 10. Zwischen Listen aus Zeilen ist * die Matrixmultiplikation, die unter Vektoren und Matrizen erklärt wird.

Listen aus Zeilen

Eine Liste aus Zeilen funktioniert wie eine kleine Tabelle. average und sum rechnen die Spalten hinunter, und map kann über die Zeilen hinweg rechnen:

calc
# Jede Zeile ist eine Person: [Probeklausur, Klausur]
Ergebnisse = [[62, 72], [70, 78], [60, 69]]
average(Ergebnisse) ergibt [64, 73]
sum(Ergebnisse) ergibt [192, 219]
map(average(r), r, Ergebnisse) ergibt [67, 74, 64.5]

median, min, max und stddev akzeptieren keine Listen aus Zeilen. Nimm map über die Zeilen, wie in der letzten Zeile, oder zieh eine Spalte in eine eigene Liste heraus.

Die genauen Regeln für all diese Operationen stehen in der Referenz Höhere Mathematik: Möglichkeiten und Grenzen.

Alles zusammen

Hier ist eine Woche voller Schrittzahlen von einer Uhr, mit einem Tagesziel:

calc
# Schritte, Montag bis Sonntag
Schritte = [8200, 10400, 6300, 12000, 9100, 7400, 9600]
Ziel = 9000
sum(Schritte) ergibt 63,000
average(Schritte) ergibt 9,000
median(Schritte) ergibt 9,100
Tage mit erreichtem Ziel: count(filter(s >= Ziel, s, Schritte)) ergibt 4
Spanne: max(Schritte) - min(Schritte) ergibt 5,700
# Etwa 0,75 m pro Schritt
Strecke = sum(Schritte) * 0.75 m
Strecke in km ergibt 47.25 km

Der Durchschnitt liegt genau auf dem Ziel, erreicht wurde es aber nur an vier Tagen, und zwischen dem besten und dem schlechtesten Tag liegen 5.700 Schritte. Ändere Ziel oder füge die Zahlen der nächsten Woche ein, und jede Zeile aktualisiert sich.