実際にあります。代数的仕様と呼ばれる抽象データ型に基づく関数型言語の仕様の形式があります。それらの動作は、いくつかの点でオブジェクトの動作と非常に似ていますが、構成は論理的かつ数学的であり、機能的構成のように不変です。
ブエノスアイレス大学のAlgorithmsandData Structuresクラスで使用されている特定の機能仕様言語には、ジェネレーター、オブザーバー、および追加の操作があります。ジェネレーターは、インスタンスであり、データ型の可能な構成でもある式です。たとえば、バイナリツリー(ADT bt)の場合、nullノードとバイナリノードがあります。したがって、ジェネレーターがあります。
-nil
-bin(left:bt, root: a, right:bt)
左がbtのインスタンスである場合、ルートは一般的な値であり、右は別のbtです。したがって、nilはbtの有効な形式ですが、bin(bin(nil、1、nil)、2、nil)も有効であり、値が2のルートノードを持つバイナリツリーを表し、左側の子ノードは値が1で、子の右ノードがnullです。
したがって、ツリー内のノード数を計算する関数の場合、ADTのオブザーバーを定義し、各ジェネレーターにマップする公理のセットを定義します。したがって、たとえば:
numberOfNodes(nil) == 0
numberOfNodes(bin(left,x,right))== 1 + numberOfNodes(left) + numberOfNodes(right)
これには、操作の再帰的定義を使用するという利点があり、構造的帰納法と呼ばれるものを使用して仕様が正しいことを証明できる、より形式的に興味深い特性があります(はい、アルゴリズムが適切な結果を生成することを示します)。
これは、学界以外ではめったに見られないかなり学術的なトピックですが、アルゴリズムやデータ構造についての考え方を変える可能性のあるプログラム設計についての洞察を得る価値があります。適切な参考文献は次のとおりです。
Bernot、G.、Bidoit、M.、およびKnapik、T.1995。観察仕様と区別できない仮定。理論。計算します。科学 139、1-2(1995年3月)、275-314。DOI =
http://dx.doi.org/10.1016/0304-3975(94)00017-D
Guttag、JV and Horning、JJ 1993. Larch:正式な仕様のための言語とツール。Springer-Verlag New York、Inc.ソフトウェア開発における抽象化と仕様、Barbara Liskov y John Guttag、MIT Press、1986年。
代数的仕様の基礎1.方程式と初期意味論。H. Ehrig y B. Mahr Springer-Verlag、ベルリン、ハイデルベルク、ニューヨーク、東京、ドイツ、1985年。
対応するリンク:
http: //www.cs.st-andrews.ac.uk/~ifs/Resources/Notes/FormalSpec/AlgebraicSpec.pdfhttp:
//nms.lcs.mit.edu/larch/pub/larchBook。 ps
それは興味深いトピックの一体です。