アットウィキロゴ
大久保弘崇
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

大久保弘崇

ex2.2

最終更新:

hirotakaohkubo

- view
管理者のみ編集可

2.5

意図している「テストデータのねじれ」が何なのか想像できない。
それさえ判れば書けるのだが。
「キューの中身が全て同じ値だと違いが起きない」とかか?

2.6

公式にある解答例。ただし「あまり賢くない」と書いてある。
-- A not-very-intelligent answer to Exercise 2.6 - try to improve it
instance Arbitrary Form where
  arbitrary = sized arbForm
 
arbForm 0 = liftM Var arbitrary
arbForm n | n > 0 = frequency [(1, liftM Var arbitrary),
                               (2, liftM2 (: &) subForm subForm),
                               (2, liftM Not subForm)]
  where subForm = arbForm (n `div` 2)
 
sizeの減らし方が大雑把だという意味なら、次のようにするのはどうか。
instance Arbitrary Form where
  arbitrary = sized arbForm
 
arbForm 0 = liftM Var arbitrary
arbForm n | n > 0 = frequency [ (1, liftM Not (arbForm (n − 1)))
                              , (1, liftM2 (: &) subForm subForm)]
  where subForm = arbForm (n `div` 2)
 
しかしこれでは完全木しか作れないので、やはりfrequencyでもVarを出す可能性を残す必要がある、
ような気がする。

自分用メモ
n `div` 2 で同じ大きさの木を両方で作る代わりに、
nを超えない整数kをランダムに選び、左をk,右をn-kの大きさの木にすればよいのではないか?

2.7

「モデルのサイズ」を付置した変数の数と仮定する。
prop_Complete :: Form -> Property
prop_Complete p = forAll (valuationOver (names p)) $ \ val ->
  val |= p ==> collect (l2m (length (names p))) $
               any (\ val' -> val' `covers` val) (models p)
  where
    l2m k = let i = k `div` 5 * 5 in show i ++ " - " ++ show (i+4)
 

コメント

名前:
コメント:
記事メニュー
最近更新されたスレッド
人気記事ランキング
ウィキ募集バナー