エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

VDM

VDMというのを知る。ここにある例題を見ながら、「宣言的に定義する様子が関数型言語みたい」と思った、ので、書いてみました。

swap

swapは普通に。

swap (x, y) = (y, x)

max・その1

集合や列の代わりにリストを使って。

max_value (n:ns) = max_value' n ns
  where
    max_value' x []     = x
    max_value' x (n:ns) = max_value (max x n) ns

素直に書いてみた。普通なんだけれどもVDMで書かれているものとちょっと違うような…?

max・その2

1行で定義できないかと考えてみた。こんな感じでいかがだろうか。効率は悪そうだけど。

max_value ns = head [x | x <- ns, and $ map (\n -> x >= n) ns]