我正在尝试编写一个正确的线性上下文无关语法,其中0和1的数字之间的差异应该是偶数。例如:
010001 = 4 - 2 = 2 (even)
我有similar problem。也许它会有所帮助!我正试图在prolog上写它。我做了其他10次练习,但这对我来说太难了。关于如何做的任何想法?
我的代码
s --> [].
s --> [1],a.
s --> [0],b.
a --> [1],s.
a --> [0],c.
b --> [1],c.
b --> [0],s.
c --> [].
c --> [1],b.
c --> [0],a.
它适用于许多情况,但我不确定它是否适用。
答案 0 :(得分:3)
通过一点点数学可以大大简化问题。
让a
为0,b
- 1的数量,n
- 单词的长度。我们希望abs(a - b)
均匀。
算一算:
a + b = n
b = n - a
a - b = a - n + a = 2*a - n
2*a
始终是偶数,所以abs(a - b)
即使n
是偶数也是如此。
因此,任务实际上只是检查单词的长度是否均匀。
解决方案:
s --> [].
s --> digit, digit, s.
digit --> [0].
digit --> [1].