cangoxina

生産性向上見習いのブログ的な何かです

VDM++における基本データ型(Basic Data Types)

VDM++は形式仕様記述言語と呼ばれる言語で、仕様を記述するための言語です。

本記事はVDM++の型の中でも基本となる、基本データ型(Basic Data Types)の簡単なまとめです。

Overture Toolのサイトで公開されている、VDM-10 Language Manualを参考にしています。

また、本記事は、自分が以前書いたVDM++における型定義という記事をリファインした記事です。


目次


2種類の型

VDM++には、プログラミング言語でいうが存在しており、大きく分けて基本データ型と合成型で構成されています。以下が簡単な説明です。

  • 基本データ型(Basic Data Types) : 基本的で単純な型
  • 合成型(Compound Types) : 型(基本型か合成型)の組み合わせによってできる型。

基本データ型(Basic Data Types)

基本的で単純な型です。以下の5種類の型があります。

  • ブール型(The Boolean Type)
  • 数値型(The Numeric Types)
  • 文字型(The Character Type)
  • 引用型(The Quote Type)
  • token型(The Token Type)

ブール型(The Boolean Type)

真理値を扱う型です。

情報

型名 シンボル 意味 取り得る値
boolean bool 真理値 true, false

利用できる演算子

以下のabは任意のbool式です。

演算子 名前
not b 否定(Negation) boolbool
a and b 論理積(Conjunction) bool * boolbool
a or b 論理和(Disjunction) bool * boolbool
a => b 含意(Implication) bool * boolbool
a <=> b 同値(Biimplication) bool * boolbool
a = b 等しい(Equality) bool * boolbool
a <> b 等しくない(Inequality) bool * boolbool

数値型(The Numeric Types)

数字を扱う型です。5種類の型で構成されています。

情報

型名 シンボル 意味 取り得る値
real real 実数 全ての数
rational rat 有理数 ..., -12.78356, ... , 0, ..., 3, ..., 1726.34, ...
integer int 整数 ..., -2, -1, 0, 1, ...
natural nat 自然数 0, 1, 2, ...
positive natural nat1 正の自然数 1, 2, 3, ...

利用できる演算子

以下のxyは任意の数値です。

演算子 名前
-x マイナス(Unary minus) realreal
abs x 絶対値(Absolute value) realreal
floor x 切り捨て(Floor) realint
x + y 加法(Sum) real * realreal
x - y 減法(Difference) real * realreal
x * y 乗法(Product) real * realreal
x / y 除法(Division) real * realreal
x div y 商(Integer division) int * intint
x rem y x - y * (x div y)(Remainder) int * intint
x mod y x - y * floor(x / y)(Modulus) int * intint
x ** y 累乗(Power) real * realreal
x < y 未満(Less than) real * realbool
x > y 超過(Greater than) real * realbool
x <= y 以下(Less or equal) real * realbool
x >= y 以上(Greater or equal) real * realbool
x = y 等しい(Equal) real * realbool
x <> y 等しくない(Not equal) real * realbool

文字型(The Character Type)

単一の文字を扱う型です。

複数のQuoteを|区切りで列挙することで、列挙型となります。

自動車の状態 = <運転中> | <停止中> | <加速中>

情報

型名 シンボル 意味 取り得る値
Char char 文字 '1', 'a', '壱' など

利用できる演算子

以下のc1c2は任意の文字です。

演算子 名前
c1 = c2 等しい(Equal) char * charbool
c1 <> c2 等しくない(Not equal) char * charbool

引用型(The Quote Type)

列挙型の要素を扱う型です。

型名 シンボル 意味 取り得る値
Quote <QuoteLit> 引用型 <運転中>, <停止中>, <加速中>, ...

*QuoteLitは任意の文字列

利用できる演算子

以下のqrは任意の列挙型Tに属する任意の引用値です。

演算子 名前
q = r 等しい(Equal) T * Tbool
q <> r 等しくない(Not equal) T * Tbool

token型(The Token Type)

正直良くわかっていません。

*1には以下のように書かれています。

トークンは、異なる値の無限集合であり、何らかの値ではあるが、具体的にどのような値であるのかについては、トークン型を用いる際の仕様の抽象度では、論じない型である。 仕様記述者は、トークン型の利用により、データの型や値の詳細にはあえて立ち入らずに、 概念的にデータの存在を明示したり、抽象的なデータを取り扱ったりすることが可能となる。

「抽象的なデータですよ〜」というのを表す型って考えておきます。

情報

型名 シンボル 意味 取り得る値
Token token token型 mk_token(5), mk_token({9, 3}), mk_token([true, {}]), ...

利用できる演算子

以下のstは任意のtokenです。

演算子 名前
s = t 等しい(Equal) token * tokenbool
s <> t 等しくない(Not equal) token * tokenbool

次は合成型

次は、合成型の記事を書きます。

今度こそ書きます。



スポンサーリンク