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]