これは長さ3の任意のリストを作成すると思いますが、どのようにして任意の長さのリストを作成できますか?再帰的なデータ型の任意のインスタンスを作成するにはどうすればよいですか?
import Test.QuickCheck
data List a =
Nil
| Cons a (List a)
deriving (Eq, Show)
instance Arbitrary a => Arbitrary (List a) where
arbitrary = do
a <- arbitrary
a' <- arbitrary
a'' <- arbitrary
return $ (Cons a (Cons a' (Cons a'' (Nil))))
ほとんどの場合、リスト内のすべての要素に同じ確率を使用します。空でないリストを取得する確率は50%、1つの要素でリストを取得するには25%、2つの要素でリストを取得するには12.5%に。あなたがそのような振る舞いを望むなら(例えば '' 2 **(-n + 1) 'という確率で長さ 'n'のリストを生成する)、それは問題ありませんが、一般的に、これは短いリストにつながります。 – Zeta
はいあなたの解決策は明らかに優れており、すでに受け入れられているので、これを削除したいのですか? – Carsten
Nah、しかしもっと長いリストを生成する代替手段を見つけることができます。'[] a'と同型である型の例として、' toList :: [a] - > List a'と 'arbitrary = toList <$> arbitrary'を例に挙げます。 – Zeta