您使用什么算法来枚举由无上下文语法生成的字符串?
当没有递归时似乎可行,但我无法弄清楚如何在一般情况下这样做,它可能包含各种(可能是间接的)递归.
(我不是在寻找像本页那样的深奥解决方案;我正在寻找一种可以映射到标准命令式代码的算法.)
是否存在在两种数据类型之间创建双射的策略?例如,考虑以下数据类型:
data Colbit
= White Colbit Colbit
| Black Colbit Colbit
| Tip
data Bits
= B0 Bits
| B1 Bits
| BEnd
Run Code Online (Sandbox Code Playgroud)
加上有效元素Colbit必须具有奇数个节点(白/黑构造函数)的约束.我该如何创建地图:
toColbit :: Bits -> Colbit
fromColbit :: Colbit -> Bits
Run Code Online (Sandbox Code Playgroud)
这样,对所有人b : Bits,fromColbit (toColbit b) == b对所有人来说c : Colbit,toColbit (fromColbit c) == c?(另外,这个属性叫什么?)