Warum fangen Listen eigentlich mit 0 an?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Notiz ins Gedankenbuch: JA, Pascal *ist* komisch!

;)
lunar

BlackJack hat geschrieben:@Lunar: Das stimmt zwar, aber deswegen würde ich Delphi nicht als Einser-Offset-Sprache bezeichnen.
Ok, dann zahlen wir Delphi eben zur Gattung der "Jedes-Offset-ist-möglich"-Sprachen ;) Ich wollte nur darauf hinaus, dass Delphi nicht bei null anfängt, da der OP die null ja erwähnt hatte.
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

Python gehört auch zu den "Jedes-Offset-ist-möglich"-Sprachen.
Nur weil die Standardklassen das so wollen, muss man's ja nicht beibehalten.
Mal ein einfaches Beispiel:

Code: Alles auswählen

class OffsetList(list):
    def __init__(self, offset=0):
        super(OffsetList, self).__init__()
        self.offset = offset

    def __setitem__(self, index, item):
        s = super(OffsetList, self)
        return s.__setitem__(index - self.offset, item)

    def __getitem__(self, index):
        s = super(OffsetList, self)
        return s.__getitem__(index - self.offset)
Erweitert die Klasse `list` ganz einfach um die Möglichkeit, selbst den Startindex zu bestimmen.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Eine eigene Listenimplementierung, die dann irgendwo anfängt zu zählen, kannst du in jeder beliebigen Sprache schreiben. Man kann nur nicht in jeder Sprache den Operator dazu überladen und muss ggf. anders auf die Elemente zugreifen. Daher sieht man den Unterschied nur nicht.

Von Haus aus beginnt Python also bei 0.
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

EyDu hat geschrieben:Eine eigene Listenimplementierung, die dann irgendwo anfängt zu zählen, kannst du in jeder beliebigen Sprache schreiben. Man kann nur nicht in jeder Sprache den Operator dazu überladen und muss ggf. anders auf die Elemente zugreifen. Daher sieht man den Unterschied nur nicht.

Von Haus aus beginnt Python also bei 0.
Natürlich aber ich denke Delphi oder sonsteine Sprache wird intern auch, unabhängig davon, bei welchem Wert man anfängt, auf 0 zeigen, oder?
Das wäre dann ja nichts anderes als die obige Klasse.
Deshalb würde ich schon sagen, dass Python nicht unbedingt bei 0 anfängt.
Eine Frage der Implementierung der list-Klassen (ich zähle zu List-Klassen jetzt einfach mal alle Klassen, die den Indexoperator implementiert haben, ich kenn mich nicht mit den Fachbegriffen aus ;) ), wo man anfängt.
Man hätte die Klasse ja auch von Haus aus so schreiben können, wie ich das jetzt oben gemacht habe, wäre ja Python an sich egal und dadurch wär's immer noch dieselbe Sprache. Wobei das wahrscheinlich nicht unbedingt den Prinzipien von Python entspricht, weshalb man dann auch streng genommen sagen könnte "Das ist kein Python", aber das ist jetzt Haarspalterei.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Der Streit, ob 0 oder 1 ist alt.

Stefan
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

sma hat geschrieben:Der Streit, ob 0 oder 1 ist alt.

Stefan
Gibts das auch als "normalen" Text? Ich hab keine Lust mir englische handgeschriebene Texte durchzulesen, welche ein Thema zu einem Fachbereich behandeln, das ist irgendwie doppelt anstrengend :p
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich fand es gerade nett, das Dijkstra seine Gedanken noch mit der Hand aufgeschrieben hat und das auch noch in einer sehr ausdrucksstarken Schrift. Aber wenn's sein muss...

Stefan
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

sma hat geschrieben:Ich fand es gerade nett, das Dijkstra seine Gedanken noch mit der Hand aufgeschrieben hat und das auch noch in einer sehr ausdrucksstarken Schrift. Aber wenn's sein muss...

Stefan
Naja vielleicht schon nett, aber ich bin vielleicht einfach zu dumm dazu :)
Danke für den Link
Antworten