Wörterbuch nach Listenelementen ordnen

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.
Benutzeravatar
kbr
User
Beiträge: 1506
Registriert: Mittwoch 15. Oktober 2008, 09:27

Wenn man morgens früh erst wieder liest, ist es zu natürlich zu spät um als erster weitere Vögel einführen zukönnen :-)

Nun @Aries, Du siehst, dass die Anforderungen an eine Programmiersprache anders sind, als bei natürlichen Sprachen. Basiert z.B. der Humor auf sprachlichen Mehrdeutigkeiten, so muß eine Programmiersprache von diesen völlig frei sein und über eine Grammatik verfügen, die vom Parser/Compiler stets eindeutig und unmissverständlich (Vorsicht: Tautologiegefahr) interpretiert werden kann. Ob der Programmierer in der Lage ist, dabei das auszudrücken, was er wirklich beabsichtigt, ist eine andere Frage.

Im Rahmen dieser Anforderungen gefallen mir Ausdrücke wie 'for parrot in parrots' deutlich besser als 'for each in parrots as parrot'. Es ist für den menschlichen Leser gut verständlich, durch die Kürze leicht zu lesen und bleibt dennoch eindeutig. Und zudem ist es unkompliziert und somit von Vorteil für die Implementierung eines Parsers.

Immerhin, es ist Dir gelungen BlackJack ins ko zu treiben — dies gelingt nur wenigen ...
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@Aries:
In Python ist es halt so festgelegt, das die for-Schleife auf Aufzählungstypen funktioniert, die alles enthalten können (general purpose Idee). Wenn Dir das auf Programmierebene nicht passt, kannst Du entweder:
- den Aufzählungstypen so kastrieren, dass er enthält, was sein Name verspricht, also parrots auch nur parrots enthalten kann
- den Elementbezeichner allgemein halten
oder solltest vllt die Programmiersprache wechseln, da duck typing nicht das Richtige für Dich ist.

Edit:
Und die Diskussion um die korrekte Form einer for-Schleife ist müßig. Die Programmiersprachen haben hier ihre eigene Evolution hingelegt und die natürlichsprachliche Annäherung ist nur ein Faktor unter vielen. Deshalb musst Du Programmiersprachen nach wie vor lernen, um die Sematik hinter einen Konstrukt zu erschliessen. Direkte Übertragbarkeit wird es wohl nie geben, da die Domänen der Sprachen zu verschieden sind (Lebenswelt vs. formale Strenge heutiger Rechner).
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

jerch hat geschrieben: oder solltest vllt die Programmiersprache wechseln, da duck typing nicht das Richtige für Dich ist.
Naja, auch in statisch typisierten Sprachen kann man andere Dinge in einen Container bekommen, als man anhand des Namens suggeriert. Es erfordert nur mehr Verränkungen (Stichwort Adapter Pattern) :twisted: : Gist

(Ist natürlich ziemlich konstruiert und man würde hoffentlich nicht gegen konkrete Klassen programmieren)

Wichtiger ist doch eine *sinnvolle* Namensgebung; insbesondere eben des Containers. Sofern man bei Papageien auch Unterarten a la Sittiche, Kakadus, Aras, Nestorpapageien usw. betrachtet, würde man es sicherlich weiterhin "parrots" nennen. Hier wäre, anstatt der Erweiterung, natürlich ein neuer Name a la "pets" sinnvoller.

Vielleicht sieht der OP aber nun ein, dass Namen wichtig sind, aber in erster Linie bezüglich des Verhaltens, das man von den Objekten erwartet kann.

Ach ja, und wir hatten mal eine for-Schleife in Java drin: ``for (Parrot parrot : parrots)`` - wie man sieht wird auch hier zuerst der Name des Elements genannt und danach der des Containers. Allerdings gefällt mir C# da besser: ``foreach(var parrot in parrots)``; ist imho noch lesbarer und implizite Typisierung ist schon was feines. Aber an Pythons for-Schleife kommt in Sachen Lesbarkeit nichts heran :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hyperion hat geschrieben:Naja, auch in statisch typisierten Sprachen kann man andere Dinge in einen Container bekommen, als man anhand des Namens suggeriert. Es erfordert nur mehr Verränkungen (Stichwort Adapter Pattern) :twisted: : Gist
Naja, Verränkungen braucht es jetzt nicht:

Code: Alles auswählen

int primes[] = {2, 3, 5, 42}
Aber mal etwas anderes: wer kümmert sich jetzt um das parrot-Modul?
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

EyDu hat geschrieben: Naja, Verränkungen braucht es jetzt nicht:

Code: Alles auswählen

int primes[] = {2, 3, 5, 42}
Nice :-) Ich war wohl zu stark auf Typen aus... ;-)
EyDu hat geschrieben: Aber mal etwas anderes: wer kümmert sich jetzt um das parrot-Modul?
Mach doch mal nen Design-Vorschlag, was es können soll! :mrgreen:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
snafu
User
Beiträge: 6861
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Für Java hätte ich ja beispielhaft genannt: `public class Dog implements Parrot`. Natürlich vorausgesetzt, dass `Parrot` auch tatsächlich eine Schnittstelle ist. Aber da Schnittstellen ja so cool sind, ist das bestimmt eine. ;)

Letztlich beruht ja alles in der Programmierung auf Verträgen bezüglich des erwarteten Verhaltens. Daran ändert sich auch nichts wesentliches, wenn man explizite Typangaben macht. Ausgetrickst werden kann man immer irgendwie. In manchen Sprachen eben nur mit weniger Codezeilen als in anderen.

Achja, und `extends` ginge natürlich ebenso, falls das jemand einwenden möchte. Es sollte einfach nur ein schön plakatives Beispiel sein. Da erschien mir `implements` passender, um zu zeigen, wie Verhalten nachgeahmt werden kann. :)

Aber richtig coole Java-Heads würden wahrscheinlich nie mit Interfaces arbeiten und alles `final` machen, um den doofen Programmierer vor sich selbst zu schützen. :cool:
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hyperion hat geschrieben:
EyDu hat geschrieben:Aber mal etwas anderes: wer kümmert sich jetzt um das parrot-Modul?
Mach doch mal nen Design-Vorschlag, was es können soll! :mrgreen:
Ich hätte gerne ein do-for-each-hereinafter-referred-to-as-Schleife, quasi als __future__-Modul. Mit PyPy geht das sicher noch recht einfach, aber eine CPython-Lösung sieht nach etwas viel Arbeit aus.
Das Leben ist wie ein Tennisball.
BlackJack

Auf jeden Fall sollte man sich auf die Farben und das Sprechen konzentrieren. Für's fliegen gibt es ja schon das `antigravity`-Modul. :-)
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

snafu hat geschrieben:Für Java hätte ich ja beispielhaft genannt: `public class Dog implements Parrot`...
Das wird spätestens in Java 22.0 als Fehler quittiert: "Dog cant be inherited from Parrot - possible parents are Canida, Mammal, Vertebrate, Chordate, Deuterostome, Animal, Organism". Endlich alles an die Kette gelegt, wäre ja auch noch schöner, wenn man Namen nach freiem Gusto vergeben könnte. :twisted:

Also `for mouse in cat:` find ich ja schon wieder witzig.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

jerch hat geschrieben:Also `for mouse in cat:` find ich ja schon wieder witzig.
Oder ``for elephant in snake`` als Anspielung auf «Der kleine Prinz»: http://imgur.com/rSlP0bm (auf dem Bild ist natürlich kein Hut zu sehen, ihr phantasielosen Erwachsenen! :P).
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Ist jetzt reichlich offtopic und doch bemerkenswert - sucht man nach dog und cat unter google images, so muss man als Ausserirdischer annehmen, das Hund und Katze dickste Freunde sind. Da muss man sich schon fragen, wieviel Wahrheit die "cloud intelligence"-Internet hervorbringt, wenn selbst bei so simplen Zusammenhängen der Informationsföhn uns die Frisur (dermaßen falsch) richtet. :shock:

</offtopic>
Benutzeravatar
snafu
User
Beiträge: 6861
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

jerch hat geschrieben:
snafu hat geschrieben:Für Java hätte ich ja beispielhaft genannt: `public class Dog implements Parrot`...
Das wird spätestens in Java 22.0 als Fehler quittiert: "Dog cant be inherited from Parrot - possible parents are Canida, Mammal, Vertebrate, Chordate, Deuterostome, Animal, Organism". Endlich alles an die Kette gelegt, wäre ja auch noch schöner, wenn man Namen nach freiem Gusto vergeben könnte. :twisted:
Toll wäre ja auch: "ERROR: Won't compile, since your code is too bad. Please come again later." ;)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

jerch hat geschrieben: Also `for mouse in cat:` find ich ja schon wieder witzig.
``for man in woman```... ach lassen wir das :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
snafu
User
Beiträge: 6861
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hyperion hat geschrieben:
jerch hat geschrieben: Also `for mouse in cat:` find ich ja schon wieder witzig.
``for man in woman```... ach lassen wir das :twisted:
`if None in hirn`...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Besser: ``if hirn is None`` ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
snafu
User
Beiträge: 6861
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Stimmt. Hätte wenn schon `None in head` heißen müssen.
Antworten