7

Die Grafik ist wohl die vielseitigste und wertvollste Datenstruktur von allen. Ich kann einzelne Variablen, Listen, Hashes usw. und natürlich Graphen damit speichern.Sprachen mit nativer/syntaktischer/Inline-Graph-Unterstützung?

Gibt es da Sprachen, die Inline/native Graph-Unterstützung und Syntax bieten? Ich kann Variablen, Arrays, Listen und Inline-Hashes in Ruby, Python und Javascript erstellen, aber wenn ich ein Diagramm haben möchte, muss ich entweder die Repräsentation selbst mit einer Matrix/Liste verwalten oder eine Bibliothek auswählen und die Graph-Through-Methode verwenden Anrufe.

Warum in aller Welt ist das 2010 noch so? Und praktisch gibt es Sprachen, die Inline-Graph-Unterstützung und Syntax bieten?

+0

Probieren Sie nPiet: http://www.bertnase.de/npiet/ (Hinweis: das ist ein Witz). –

+0

Interessanter und gültiger Punkt. Ich vermute, dass die Vielfalt der Graphen, die Menschen im Allgemeinen manipulieren, der Grund dafür ist, dass sie in Sprachen nicht als eingebaute (oder sogar Teil einer Standardbibliothek, AFAIK!) Vorhanden sind. Es gibt jedoch viele Sprachen, die auf dem Umschreiben von Graphen basieren, aber dies geschieht im Allgemeinen hinter den Kulissen, nicht als von einem Programmierer zugängliche Sache. – Gian

+0

Ich stimme zu, dass Diagramme in der Natur variieren, aber nicht, dass dies ein starker Grund ist, keine Standardimplementierung und Inline-Syntax anzubieten. –

Antwort

2

Das Hauptproblem von dem, was Sie fragen, ist, dass eine allgemeinere Lösung nicht die beste für ein spezifisches Problem ist. Es ist nur Durchschnitt für alle, aber nicht der Beste.

Ok, Sie können eine Liste in einem Diagramm speichern, vorausgesetzt, dass sie entartet ist, aber warum sollten Sie so etwas tun? Und wie würden Sie eine Hashmappe in einem Graph speichern? Warum brauchen Sie eine solche Struktur?

Und vergessen Sie nicht, dass die Graphimplementierung entsprechend gewählt werden muss, mit welchen Operationen Sie es tun, andernfalls wäre es wie eine Hashtabelle zum Speichern einer Werteliste oder eine Liste zum Speichern einer geordneten Sammlung ein Baum. Sie wissen, dass Sie eine Adjazenzmatrix, eine Kantenliste oder Adjazenzlisten verwenden können. Jede unterschiedliche Implementierung mit ihren eigenen Stärken und Schwächen.

Dann Graphen können wirklich viele Eigenschaften im Vergleich zu anderen Sammlungen von Daten haben, zyklisch, azyklisch, gerichtet, ungerichtet, zweigeteilt, und so weiter und für jeden spezifischen Fall können Sie sie auf eine andere Art und Weise implementieren (unter Annahme einer Hypothese in der grafischen Darstellung, die Sie benötigen), also wäre es zuviel Overkill, sie in nativer Syntax zu haben, da Sie sie sowieso konfigurieren müssten (und die Sprache sollte viele Implementierungen/Optimierungen bereitstellen).

Wenn alles schon gemacht ist, entfernen Sie den Spaß der Entwicklung :) Übrigens suchen Sie einfach nach einer Sprache, mit der Sie Ihre eigenen Graph DSL schreiben und damit leben können!

+0

Um ehrlich zu sein, denke ich, dass die Welt der programmierbaren Mathematikumgebungen eine interessante ist. Ich habe nicht viel damit zu tun, aber ich nehme an, dass sie existieren, und es ist eine Idee, die es wert ist, erforscht zu werden, IMHO. –

+0

Wenn ich in Java eine Liste benötige, verwende ich standardmäßig eine ArrayList und wechsle bei Bedarf zu einer LinkedList. Warum kann ich nicht die Standard-Graphimplementierung für die beste allgemeine Anpassung zur Hand haben, in die Sprache einbauen, die ich anpassen kann, wenn ich muss? Ich habe wirklich nicht viel Spaß, die Implementierungsdetails jedes Mal neu zu überdenken, wenn ich ein Diagramm mache, es ist eine riesige Zeitverschwendung. –

+0

Wenn Sie Graphen benötigen, benötigen Sie diese normalerweise für intensive Berechnungen. Aus diesem Grund müssen Sie sorgfältig darüber nachdenken, ob Sie eine Matrix oder eine Adjazenzliste verwenden (da sie bei einigen Operationen entgegengesetzt sind). Meine Java-Implementierung ist nur 600-700 Zeilen Code, schrieb, dass einmal und ich benutze es immer noch, wenn es gebraucht wird, aber es modelliert nur einige Eigenschaften .. Wie immer seidig schlägt viele mathematische Umgebungen haben Graphen Implementierungen – Jack

1

GrGen.NET (www.grgen.net) ist eine Programmiersprache für Graphtransformation und einer Umgebung einer graphischen Debugger einschließlich. Sie können Ihr Grafikmodell, die Rewrite-Regeln und die Regelkontrolle mit einigen netten Spezialsprachen definieren und den generierten Assembler/C# -Code aus jeder beliebigen .NET-Sprache oder aus der mitgelieferten Shell verwenden.

Um zu verstehen, warum normale Sprachen keine so praktische/eingebaute Schnittstelle zu Graphen bieten, werfen Sie einfach einen Blick auf die Menge an Code, die für dieses Projekt geschrieben wurde: Der Compiler allein ist mehrere Mannjahre Arbeit. Das ist ein Preis, der für eine Feature/Datenstruktur zu hoch ist, die nur eine Minderheit von Programmierern jemals benötigt - daher ist sie nicht in allgemeinen Programmiersprachen enthalten.