haskell - 如何从每个可能的字符中生成字符串?
问题描述
目前我正在生成这样的字符串:
arbStr :: Gen String
arbStr = listOf $ elements (alpha ++ digits)
where alpha = ['a'..'z']
digits = ['0'..'9']
但显然这只会从 alpha num 字符生成字符串。我怎样才能从所有可能的字符中生成它?
解决方案
Char
是 theEnum
和Bounded
typeclass 的实例,您可以使用该arbitraryBoundedEnum :: (Bounded a, Enum a) => Gen a
函数:
import Test.QuickCheck(Gen, arbitraryBoundedEnum, listOf)
arbStr :: Gen String
arbStr = listOf arbitraryBoundedEnum
例如:
Prelude Test.QuickCheck> sample arbStr
""
""
"\821749"
"\433465\930384\375110\256215\894544"
"\431263\866378\313505\1069229\238290\882442"
""
"\126116\518750\861881\340014\42369\89768\1017349\590547\331782\974313\582098"
"\426281"
"\799929\592960\724287\1032975\364929\721969\560296\994687\762805\1070924\537634\492995\1079045\1079821"
"\496024\32639\969438\322614\332989\512797\447233\655608\278184\590725\102710\925060\74864\854859\312624\1087010\12444\251595"
"\682370\1089979\391815"
或者您可以arbitrary
在类型类中使用Arbitrary Char
:
import Test.QuickCheck(Gen, arbitrary, listOf)
arbStr :: Gen String
arbStr = listOf arbitrary
请注意,arbitrary
forChar
的实现使得 ASCII 字符比非 ASCII 字符更常见(三倍),因此“分布”不同。
推荐阅读
- api - 邮递员多次运行相同的请求
- microsoft-graph-api - 在 Teams 中跟踪用户位置
- python - matplotlib 中的工具栏在 tkinter 画布中不起作用
- regex - Google Data Studio:向用户显示特定 URL 路径
- kubernetes - kube-system 命名空间是如何创建的
- python - Python:在函数定义中使用不同的变量名
- mongodb - MongoDB 3.6 版本中的数据类型转换
- php - 在 WooCommerce 中更改自定义产品类型的订单送货地址
- xamarin - 如何从 C# xamarin 中的变量源从 URL 加载图像?
- php - 我可以在 Laravel 中不存储的情况下显示/打开/预览 base64 pdf