In der Tat ist es. Es gibt eine Form der Spezifikation für funktionale Sprachen, die auf abstrakten Datentypen basiert, die als algebraische Spezifikation bezeichnet werden. Ihr Verhalten ist dem von Objekten in mancher Hinsicht sehr ähnlich, die Konstrukte sind jedoch logisch und mathematisch und sind wie funktionale Konstrukte unveränderlich.
Eine spezielle funktionale Spezifikationssprache, die in der Klasse Algorithmen und Datenstrukturen der Universität von Buenos Aires verwendet wird, hat Generatoren, Beobachter und zusätzliche Operationen. Ein Generator ist ein Ausdruck, der sowohl eine Instanz als auch eine mögliche Zusammensetzung des Datentyps ist. Zum Beispiel haben wir für einen Binärbaum (ADT bt) null Knoten und binäre Knoten. So würden wir die Generatoren haben:
-nil
-bin(left:bt, root: a, right:bt)
Wo links eine Instanz eines bt ist, ist die Wurzel ein allgemeiner Wert, und rechts ist ein weiterer bt. Also, nil ist eine gültige Form eines bt, aber bin (bin (nil, 1, nil), 2, nil) ist auch gültig und repräsentiert einen binären Baum mit einem Wurzelknoten mit einem Wert von 2, einem linken Kindknoten mit einem Wert von 1 und einem Null-Kind rechts Knoten.
Also für eine Funktion, die sagen, berechnet die Anzahl der Knoten in einem Baum, definieren Sie einen Beobachter der ADT, und Sie definieren eine Reihe von Axiomen, die zu jedem Generator zuordnen. So , zum Beispiel:
numberOfNodes(nil) == 0
numberOfNodes(bin(left,x,right))== 1 + numberOfNodes(left) + numberOfNodes(right)
Dies hat den Vorteil der Verwendung von rekursiven Definitionen von Operationen und hat die mehr formal interessante Eigenschaft, dass Sie etwas genannt strukturelle Induktion verwenden kann, um nachzuweisen, dass Ihre Angabe korrekt ist (ja, Sie demonstrieren, dass Ihr Algorithmus das richtige Ergebnis liefert).
Dies ist ein ziemlich akademisches Thema, das selten außerhalb von akademischen Kreisen zu sehen ist, aber es lohnt sich, einen Einblick in das Programmdesign zu bekommen, das Ihre Denkweise über Algorithmen und Datenstrukturen verändern kann. Die richtige Bibliographie umfasst:
Bernot, G., Bidoit, M., und Knapik, T. 1995. Beobachtungs Spezifikationen und die Ununterscheidbarkeit Annahme. Theor. Comput. Sci. 139, 1-2 (Mar. 1995), 275-314. DOI = http://dx.doi.org/10.1016/0304-3975(94)00017-D
Guttag, J.V. und Horning, J.J. 1993. Lärche: Sprachen und Werkzeuge für Formal Spezifikation. Springer-Verlag New York, Inc. Abstraktion und Spezifikation in der Softwareentwicklung, Barbara Liskov y John Guttag, MIT Press, 1986.
Grundlagen der algebraischen Spezifikation 1. Gleichungen und Anfangs Semantics. H. Ehrig y B. Mahr Springer-Verlag, Berlin, Heidelberg, New York, Tokio, Deutschland, 1985.
mit entsprechenden Links: http://www.cs.st-andrews.ac.uk/~ifs/Resources/Notes/FormalSpec/AlgebraicSpec.pdf http://nms.lcs.mit.edu/larch/pub/larchBook.ps
Es ist ein Heck eines interessanten Thema.
Wenn Sie in der Programmierung sind mit rekursiven Datentypen, werfen Sie einen Blick auf die Arbeit "Funktionale Programmierung mit Bananen, Linsen, Umschlägen und Stacheldraht" [1]. Es ist sehr interessant und hat mich sehr berührt. [1]: = http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.41.125 – Tetha