2013-07-23 26 views
14

Ich fand einige Erklärungen der offenen/geschlossenen Rekursion, aber ich verstehe nicht, warum die Definition das Wort" Rekursion "enthält, oder wie es mit dynamischen/statischen Dispatching vergleicht. Unter den Erklärungen fand ich, gibt es:.Warum heißt es "offene (oder geschlossene) Rekursion?

öffnen Rekursion ein weiteres praktisches Feature angeboten von den meisten Sprachen mit Objekten und Klassen ist die Fähigkeit, für ein Verfahren Körper eine andere Methode des gleichen Objekts über eine aufrufen spezielle Variable namens self oder, in einigen Sprachen, this Die spezielle Verhalten von Selbst ist, dass es spät gebunden ist, so dass eine in einer Klasse definierte Methode in einer Klasse eine andere Methode aufrufen kann, die später definiert wird, in eine Unterklasse der ersten. [Ralf Hinze]

... oder in Wikipedia:

Die Dispatch-Semantik von this, nämlich dass diese Methode auf Anrufe dynamisch ausgelöst werden, wie offene Rekursion ist bekannt, und bedeutet, dass diese Methoden können durch abgeleitete Klassen oder Objekte überschrieben werden. Im Gegensatz dazu verwendet die direkte benannte Rekursion oder anonyme Rekursion einer Funktion geschlossene Rekursion mit früher Bindung.

Ich las auch die Frage Stackoverflow: What is open recursion?

Aber ich verstehe nicht, warum das Wort „Rekursion“ für die Definition verwendet wird. Natürlich kann es zu interessanten (oder gefährlichen) Nebeneffekten führen, wenn man "offene Rekursion" verwendet, indem man ... einen Methodenrekursionsaufruf durchführt. Aber die Definitionen berücksichtigen den rekursiven Aufruf method/function nicht direkt (appart die "geschlossene Rekursion" in der Wikipedia-Definition, aber es klingt seltsam, da "offene Rekursion" sich nicht auf rekursiven Aufruf bezieht).

Wissen Sie, warum es das Wort "Rekursion" in der Definition gibt? Liegt es daran, dass es auf einer anderen Definition der Informatik beruht, die mir nicht bekannt ist? Sollte einfach "dynamischer Versand" nicht genügen?

Antwort

21

Ich habe versucht, hier eine Antwort zu schreiben und schrieb dann eine entire blog post darüber. Der TL; DR:

Also, wenn Sie eine echte objektorientierte Sprache zu einer einfacheren Sprache mit nur Strukturen und Funktionen zu vergleichen, die Unterschiede sind:

  • Alle Methoden können sehen, und sich gegenseitig anrufen. Die Reihenfolge, in der sie definiert sind, spielt keine Rolle, da ihre Definitionen "simultan" oder wechselseitig rekursiv sind.
  • Die Basismethoden haben Zugriff auf das abgeleitete Empfängerobjekt (d. H. Dies oder das Selbst in anderen Sprachen), so dass sie sich nicht über einander schließen. Sie sind öffnen, um Methoden zu überschreiben.

Also: offene Rekursion.

+2

Vielen Dank! Dein Blogbeitrag ist sehr klar und beantwortet wirklich meine Fragen.Alles kommt also aus funktionalem Programmiervokabular. Danke auch für deine Referenzen. –

+0

Die Mutter der Programmiersprachen ist Lambda-Kalkül, also bezieht sich alles auf Funktionen. Aber IMHO, der Satz "... kommt alles aus dem funktionalen Programmiervokabular" ist übertrieben; Es ist schwer zu verstehen, warum "offene Rekursion" existiert (Ihre Frage ist ein konkretes Beispiel), ohne über Modelle von Objekten nachzudenken. –

Verwandte Themen