Hatena::Grouperlang

檜山正幸のErlang未確認情報 RSSフィード

 | 

2009-03-31 (火)

コマンドセットの仕様を表すデータ

| 10:34

EUnitもいいんだが、僕のイメージとは違うなー。やっぱ作るしかないのかなー。

  • 事前条件は思い切って捨てよう。
  • 不変条件と事後条件は必ずチェックするようにする。
  • 事後条件をパスすると、付随したアクション(があれば)実行する。

条件=表明の書き方が問題だ。この部分は、EUnitのテスト表現(test representation)が参考になるかも。

コマンド仕様はタプルで記述することにして:

FunSpec = {Mod, FunName, ArgSpec, HelpString?}
Mod = atom()
FunName = atom()
HelpString = string()

ArgSpec = [ (integer() | s | a) ]

CmdSpec = {Cmd, Arity, FunSpec, RplyKind, Assertion?, Action?}
Cmd = atom()
Arity = integer()
RplyKind = v | s | m | vs | vm | sm | vsm 

疑問符は省略可能を表す。AssertionとActionは未定。1文字のアトムの意味は:

  • a 引数全体
  • s 状態
  • v 値
  • m メッセージ

インボーカー(invoker)は、レジスタ(状態)として次を持つ。

  • Value = {value, term()} | no_value
  • State = term()
  • Message = [term()]
  • Exception = {Class::atom(), term()} | no_exception

アサーション関数は、(Value, State, Message, Exception) -> bool() となるだろう。アサーション関数が例外のときは、インボーカーは死ぬ(もう知らん! と)。

[追記]http://d.hatena.ne.jp/m-hiyama-memo/20090331/1238474706 も参照。

事前条件に関しては、関数定義の入り口でassertしてもいいと思う。[/追記]

ValentinaValentina2012/08/24 18:51This piece was cogent, well-witrten, and pithy.

hzkiyhzhzkiyhz2012/08/25 15:48ulmEt6 <a href="http://gcoiyuwzcreu.com/">gcoiyuwzcreu</a>

kpyqduozykpyqduozy2012/08/27 00:13KrkVK3 <a href="http://dmuynnkjqulo.com/">dmuynnkjqulo</a>

dajugzudajugzu2012/08/27 22:29aIT0Zi , [url=http://jjbybzuabnzb.com/]jjbybzuabnzb[/url], [link=http://dffjjwepljnx.com/]dffjjwepljnx[/link], http://nbseayfagmif.com/

 |