Wikifunctions:Status-Updates/2024-11-13
◀ | ![]() ![]() |
▶ |
Neuer Typ: rationale Zahlen

Wikifunctions hat jetzt einen neuen Typ: rationale Zahlen. Sie erweitern die Fähigkeit, mit Zahlen umzugehen, erheblich und ermöglichen es uns, mit Brüchen und Dezimalzahlen zu arbeiten und nicht mehr nur mit ganzen Zahlen.
Rationale Zahlen werden durch zwei natürliche Zahlen und ein Vorzeichen dargestellt. Sie stellen immer exakte Brüche dar. Dies ermöglicht uns auch die exakte Darstellung beliebiger Dezimalzahlen, da diese immer als Brüche darstellbar sind.
Dies ist ein ganz anderer Ansatz als die Art und Weise, wie die meisten Programmiersprachen mathematische Werte implementieren: Sie verwenden oft Gleitkommazahlen, die die Ergebnisse runden. Das ist für viele Anwendungsfälle ausreichend, führt aber in einigen Fällen zu Präzisionsfehlern. Wenn du beispielsweise die folgende Zeile in JavaScript auswertest:
> 0.3-0.1
…ist das Ergebnis nicht 0.2
, wie du vielleicht erwartest, sondern 0.19999999999999998
(zumindest bei den Implementierungen, die wir ausprobiert haben).
Es gab eine lebhafte Diskussion über den Typenvorschlag und im Chat darüber, wie rationale Zahlen genau dargestellt werden können, insbesondere über die Frage, ob wir sowohl 1/2 als auch 2/4 als Werte zulassen sollten (da sie beide dieselbe Zahl darstellen) oder ob letzteres eine ungültige rationale Zahl sein und nur vereinfachte Brüche zulässig sein sollten. Wir haben uns für vereinfachte Werte entschieden, aber ich hoffe, dass wir in der Praxis Postels Gesetz befolgen werden, indem wir bei der Annahme von Werten großzügig und bei der Ausgabe von Werten streng sind.
Für rationale Zahlen fehlen derzeit noch ein Renderer und ein Parser und wir laden die Community ein, Vorschläge zu machen. Dadurch wird die Verwendung des Typs wesentlich einfacher (siehe auch unten).
Wie erwähnt sind Gleitkommazahlen ein verwandter Typ. Es findet noch eine Diskussion mit mehreren Optionen über die Darstellung von Gleitkommazahlen statt und wir möchten vor der Implementierung einen Konsens erzielen. Wir laden dich ein, an der Diskussion über die Darstellung von Gleitkommazahlen teilzunehmen.
Nächste Woche planen wir, wenn alles gut geht, den Typ Gregorianisches Jahr zu erstellen. Kommentare zum Typenvorschlag sind sehr willkommen.
Letzte Änderungen an der Software
Im Rahmen unserer Arbeit, die Dinge, die du mit Wikidata tun kannst, zu erweitern, haben wir Front-End-Unterstützung für die Verwendung weiterer Arten von Entitäten hinzugefügt (T377825). Die Back-End-Arbeit ist noch im Gange und wird bald verfügbar sein!
Wir haben unsere Datenbanktabellen hinsichtlich der Speicherung und Suche nach Bezeichnungen verbessert. Erstens haben wir die Rückgabewerte des Funktionstyps korrigiert, wenn dieser generisch ist (T375972). Zweitens fügen wir Einträge für die ZIDs von Objekten hinzu, damit diese auch dann noch gefunden werden können, wenn sie keine Bezeichnung haben (T358737 & T373038). Für beides müssen wir ein Skript ausführen, um die Datenbanken zu aktualisieren. Daher werden sie nicht sofort verfügbar sein, wenn der neue Code am Mittwoch veröffentlicht wird, sie sollten aber bald danach verfügbar sein.
Wir haben die Anzahl der Objekte, die bei der Suche nach Objekten und Wikidata-Datenobjekten sichtbar im Menü angezeigt werden, von 10 auf 5 reduziert. Dies sollte die UX verbessern, wenn sich das Feld oben oder unten auf dem Bildschirm befindet, und dir dennoch wie zuvor das Scrollen zu weiteren Ergebnissen ermöglichen (T377337).
Wir haben die Seite Special:ListObjectsByType um einen "Pager" erweitert. Anstatt also zu versuchen, alle passenden Objekte auf einmal anzuzeigen (und damit die Server zu belasten), zeigen wir dir jetzt wie bei anderen MediaWiki-Seiten jeweils 50 Objekte an und sortieren sie alphabetisch in deiner Anzeigesprache (T342912).
Natürliche Zahlen haben wieder einen Renderer und Parser



Im März mussten wir den Renderer und Parser von natürlichen Zahlen entfernen. Dies war aufgrund von Problemen im System notwendig. Als Folge der Entfernung hatten Funktionen, die natürliche Zahlen verwenden, eine weniger nützliche Schnittstelle. Die Systemprobleme wurden behoben und so haben wir die Renderer und Parser für natürliche Zahlen wieder aktiviert.
Wir hoffen, dass Wikifunctions in Zukunft noch mehr Lokalisierung bieten wird. Der Screenshot zeigt unterschiedliche Ansichten, wenn man Französisch, Deutsch und Englisch verwendet, wobei große Zahlen durch Leerzeichen, Punkte oder Kommas besser lesbar gemacht werden. Besonders gespannt sind wir aber auf die Verwendung dieses Mechanismus für Sprachen, die Zahlen unterschiedlich anzeigen, wie zum Beispiel Arabisch und Hindi. Und wir sind gespannt, welche Anzeige jede Sprachgemeinschaft bevorzugt. Wenn du dabei für deine Sprache mithelfen möchtest, lass es uns bitte wissen – oder mache es einfach!
Dokumentation zu Wikidata-basierten Typen
Wir haben eine Dokumentation zu den Wikidata-basierten Typen geschrieben, die einen Überblick über ihre Funktionsweise und Struktur gibt. Ich hoffe, dass wir irgendwann eine Reihe intuitiv nutzbarer Funktionen haben werden, aber um diese zu erstellen, kann die Dokumentation zur Unterstützung von Wikidata-Inhalten sehr nützlich sein, um solche Funktionen zu erstellen.
Funktion der Woche: kleinster Wert einer Liste natürlicher Zahlen
Beim Freiwilligentreffen der letzten Woche haben wir an zwei Funktionen gearbeitet. Eine der Funktionen haben wir letzte Woche besprochen und diese Woche besprechen wir die andere: kleinster Wert einer Liste natürlicher Zahlen.
Die Funktion nimmt eine Eingabe, eine Liste von natürlichen Zahlen, und gibt eine einzelne natürliche Zahl zurück, die die kleinste in der Liste ist. Die Liste kann beliebig lang sein. Wenn die Liste leer ist, gibt sie laut Definition 0 zurück.
Während des Freiwilligentreffens wurden sechs Tests erstellt:
- Eine leere Liste gibt 0 zurück
- In einer Liste mit einem Element ist dieses Element das kleinste.
- Wenn eine Liste ausschließlich aus gleichen Elementen besteht, ist dieses Element das kleinste.
- In einer Liste mit zwei Elementen, mit dem kleinere nach dem größeren, ist das kleinere das kleinste.
- Wenn wir die Reihenfolge der beiden Elemente vertauschen, ändert sich das Ergebnis nicht.
- In einer Liste mit mehreren Elementen wird immer noch das kleinste ausgewählt.
Während der Stunde wurden drei Implementierungen erstellt und seitdem sind zwei weitere hinzugekommen:
- Eine Implementierung in JavaScript. Zuerst wird geprüft, ob die Liste keine Elemente enthält. In diesem Fall wird 0 zurückgegeben. Dann wird der Minimalwert auf das erste Element gesetzt und für jeden Wert geprüft, ob der Minimalwert größer als der angegebene Wert ist. Wenn ja, wird der Minimalwert auf den neuen Wert aktualisiert. Sobald dies für alle Werte der Liste erledigt ist, wird der Minimalwert zurückgegeben. JavaScript verfügt überraschenderweise über keine Funktion, um den Minimalwert einer Liste von BigInts abzurufen, daher müssen wir dies implementieren.
- Die erste Implementierung in Python war eine direkte Übersetzung der JavaScript-Implementierung.
- Später wurde eine zweite Implementierung in Python hinzugefügt, die die in Python integrierte min-Funktion verwendet, die genau das tut, was wir brauchen – mit dem Unterschied, dass eine leere Liste in Python einen Fehler verursacht, während wir eine Rückgabe von 0 erwarten. Daher programmieren wir eine Prüfung auf Leere ein und geben in diesem Fall wie erwartet 0 zurück.
- Eine Implementierung wurde während des Freiwilligentreffens versucht, musste aber abgebrochen werden, da eine Funktion nicht ausgewählt werden konnte. Dies wurde später behoben, indem 99of9 einen scheinbar überflüssigen Echo-Aufruf hinzufügte. Die Komposition prüft, ob die Liste eine Länge von 1 oder weniger hat. Wenn ja, prüft sie, ob die Liste leer ist und gibt 0 zurück, andernfalls gibt sie den ersten (und einzigen) Wert zurück. Aber wenn die Liste 2 oder mehr Elemente hat, wenden wir die Funktion kleinere von zwei natürlichen Zahlen auf das erste Element der Liste an und vergleichen es mit dem kleinsten Wert einer Liste natürlicher Zahlen des Rests der Liste. Der Rest der Liste wird in ein scheinbar unnötiges Echo eingebettet, wodurch der Fehler T375972 vermieden wird. Diese Funktion ist ein weiteres Beispiel für einen rekursiven Aufruf, d. h. die Funktion ruft sich während der Komposition selbst auf.
- Die andere Komposition verwendet eine Reduzierungsfunktion, die wir bereits bei der kurzen Diskussion der Funktion der Woche Produkt von Liste natürlicher Zahlen kennengelernt haben. Dort wurde eine der Implementierungen, Produkt von Liste natürlicher Zahlen, ebenfalls mit reduzieren durchgeführt und sieht der Implementierung hier sehr ähnlich – und doch ist das Ergebnis ganz anders. Nachdem wir uns mit wenn leere Liste auf den Fall vorbereitet haben, dass die Liste leer ist (und 0 zurückgeben, wenn dies der Fall ist), reduzieren wir die Liste mit der Funktion kleinere von zwei natürlichen Zahlen, beginnend mit dem ersten Element der Liste.
Diese Funktion ist eine großartige Beispielfunktion mit zahlreichen Implementierungen und Tests.