Stellvertretend für Code algebraisch

stimmen
5

Ich habe eine Reihe von kleinen Algorithmen, die Ich mag würde in einem Papier zu schreiben. Sie sind relativ kurz und prägnant. Doch anstatt sie in Pseudo-Code (à la Cormen oder sogar Knuth) zu schreiben, würde Ich mag eine algebraische Darstellung von ihnen (mehr linear und besser LaTeX-Rendering) schreiben. Allerdings kann ich nicht Ressourcen in Bezug auf die beste Bezeichnung für diese finden, wenn es etwas gibt: zum Beispiel, wie gebe ich eine Schleife? Ob? Die Zugabe eines Tupels in eine Liste?

Hat jemand von euch dieses Problem gestoßen, und es irgendwie gelöst?

Vielen Dank.

EDIT : Danke, Leute. Ich denke , ich Phrasierung die Frage einen schlechten Job gemacht haben. Hier geht wieder, in der Hoffnung ich es deutlicher zu machen: Was ist die gemeinsame Notation für das Gespräch über Schleifen und if-then - Klauseln in einer mathematischen Notation? Zum Beispiel kann ich $acc \leftarrow acc \cup \langle i,i+1 \rangle$den „add“ -Methode einer Liste darzustellen.

Veröffentlicht am 28/01/2010 um 20:50
quelle vom benutzer
In anderen Sprachen...                            


8 antworten

stimmen
0

So etwas wie diese Webseite beschreibt?

Beantwortet am 28/01/2010 um 20:57
quelle vom benutzer

stimmen
1

Vielleicht haben Sie einen Blick auf Haskell nehmen. Haskell - Formate auch in Latex, hat eine schöne algebraische Syntax, und Sie können sogar eine Latex - Datei mit Haskell darin, vorausgesetzt , kompilieren Sie den Code in gewickelt ist \begin{code}und \end{code}. Siehe hier: http://www.haskell.org/haskellwiki/Literate_programming . Es gibt wahrscheinlich lesen und Programmiertools für andere Sprachen.

Beantwortet am 28/01/2010 um 20:59
quelle vom benutzer

stimmen
2

Ich würde kopieren Knuth. Nur wenige wissen, wie als er in einer Informatik-Einstellung besser zu kommunizieren.

Beantwortet am 28/01/2010 um 21:00
quelle vom benutzer

stimmen
-1

APL ? Das einzige Problem ist , dass nur wenige Menschen sie lesen können.

Beantwortet am 28/01/2010 um 21:00
quelle vom benutzer

stimmen
8

Tun Sie dies nicht. Sie sind abweichend von dem, was die Menschen erwarten zu sehen, wenn sie ein Papier über Algorithmen lesen. Sie sollten erwartete Praktiken folgen; Ihre Ideen sind eher die Aufmerksamkeit, die sie verdienen bekommen. Wenn du in Rom bist, mach wie es die Römer tun.

Formatieren von Code (oder Pseudo - Code , wie es sein kann) in einem latexiertem Papier ist sehr einfach. Siehe zum Beispiel, Formatierung Code in LaTeX .

Beantwortet am 28/01/2010 um 21:03
quelle vom benutzer

stimmen
1

Lisp begann als eine mathematische Schreibweise eines Rechenmodells, so dass der Vortragende ein besseres Werkzeug als Turing-Maschinen haben würde. Durch Zufall, es stellt sich heraus, dass es bei der Montage realisiert werden kann - also Lispeln wurde die Programmiersprache geboren.

Aber ich glaube nicht, das ist wirklich das, was Sie suchen, da das Rechenmodell, das beschreibt lispelt keine Schleifen hat: Rekursion wird verwendet, statt. Die Syntax ergibt sich aus der Algebra, wo Klammern bezeichnen evaluate-diese-und-Ersatz-the-Ergebnis. Tatsächlich Lisp Modell des Computing ist im Grunde Substitution - was Algebra im Wesentlichen ist.

Tatsächlich sind die meisten funktionalen Sprachen wie Lisp, Haskell und Erlang sind aus der Mathematik abgeleitet. Haskell ist eigentlich ein Ergebnis, dass die Lambda-Kalkül beweisen kann verwendet werden, Typsysteme zu implementieren. So Haskell, wie Lisp wurde aus der reinen Mathematik geboren. Aber auch hier ist die Syntax nicht, was würden Sie wahrscheinlich zu nutzen.

Sie können natürlich auch Lisp und Haskell Syntax Mathematiker erklären und sie würden es als ein „Spiel“ behandeln. Sprachkonstrukte wie Schleifen, Rekursion und conditionals können eher der Spielregeln nachgewiesen werden aus als blind wie in anderen Sprachen implementiert. Dies würde Sie in das Reich der combinatronics, einem anderen Zweig der Mathematik führen. Tatsächlich in combinatronics, auch das Konzept der Zahlen kann aus den Regeln des Spiels, anstatt ein gebürtiger Teil der Sprache (google Kirche Ziffern) ist konstruiert werden.

So haben Sie einen Blick auf Lisp / Scheme, Erlang und Haskell, wenn Sie wollen. Erlang hat vor allem Syntax nahe, was Sie wollen:

add(a,b) -> a + b

Aber meine Empfehlung ist , in C-ähnlichen Pseudocode zu schreiben. Es ist eine Art der kleinsten gemeinsamen Nenner in Programmiersprachen. Hat eine Syntax , die recht einfach zu verstehen und sauber ist. Und die Funktion Syntax ergibt sich auch aus Funktionen in der Mathematik. Denken Sie daran f(x)?

Als weiteres Plus sind die Mathematiker zu schreiben C verwendet werden Statistiker Schreiben C verwendet (obwohl sie in der Regel R bevorzugen), sind die Physiker zu schreiben C verwendet werden, sind Programmierer zumindest verwendet bei C suchen (ich weiß, ein paar, die noch nie haben berührt C).

Eigentlich kratzen , dass. Sie erwähnen , dass Ihre Zielgruppe Statistiker sind. Schreiben Sie in R

Beantwortet am 28/01/2010 um 21:47
quelle vom benutzer

stimmen
7

Ich sehe if-Ausdrücke in mathematischer Notation ziemlich oft. Die übliche Sache für eine Schleife ist eine Rekursion oder äquivalent eine Funktion rekursiv definiert.

Hier ist , wie die Ackermann - Funktion auf Wikipedia definiert ist, zum Beispiel:

A (m, n) = n + 1, wenn m = 0;  A (m-1, 1), wenn m> 0 und n = 0;  und A (m-1, A (m, n-1)), wenn m> 0 und n> 0.

Dieses Bild ist schön, weil es im Geschmack mathematischen fühlt und doch konnte man es deutlich in gibt fast genau so geschrieben und eine Implementierung hast. Es ist nicht immer möglich, das zu erreichen.

Andere mathematische Notationen, die Schleifen entsprechen umfassen Σ-Notation für die Summierung und Set-Builder - Notation .

Ich hoffe, das beantwortet Ihre Frage! Aber wenn Ihr Ziel zu beschreiben ist, wie etwas getan wird und jemand verstehen, ich denke, es ist wahrscheinlich ein Fehler anzunehmen, dass Mathematiker Gleichungen sehen würde es vorziehen. Ich glaube nicht, dass sie auswechselbare Werkzeuge (trotz Turing Äquivalenz). Wenn Ihr Algorithmus änderbare Datenstrukturen umfasst, wird prozeduralen Code wahrscheinlich gehen, besser zu sein als Gleichungen für sie zu erklären.

Beantwortet am 29/01/2010 um 00:21
quelle vom benutzer

stimmen
2

Ein Symbol für die allgemeinen Schleifen nicht vorhanden ist ; in der Regel werden Sie die Verwendung Summen Operator . „if“ verwendet vertreten Implikationen , und auf „ein Tupel zu einer Liste hinzufügen“ werden Sie von Union .

Allerdings , in der Regel ist ein bisschen Ausführlichkeit nicht unbedingt eine schlechte Sache - manchmal, vor allem für komplexe Algorithmen, ist es am besten , es zu buchstabieren in einfachem Englisch, Beispiele und Abbildungen verwendet wird . Dies ist doppelt wahr für Nicht-Programmierer.

Denken Sie daran: wenn Sie ein mathematisches Text-Buch über Euklids Algorithmus für GCD, oder das Sieb des Eratosthenes zu lesen, wie es geschrieben? Üblicherweise wird der Algorithmus selbst ist in Prosa, während der Beweis des Algorithmus ist, wo die mathematischen Symbole liegen.

Beantwortet am 29/01/2010 um 02:00
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more