Prolog 右线性上下文无关文法,偶数差为0';s和1';s
我试图写一个正确的线性上下文无关语法,其中0和1的数字之间的差异应该是偶数。例如:Prolog 右线性上下文无关文法,偶数差为0';s和1';s,prolog,context-free-grammar,dcg,Prolog,Context Free Grammar,Dcg,我试图写一个正确的线性上下文无关语法,其中0和1的数字之间的差异应该是偶数。例如: 010001 = 4 - 2 = 2 (even) 我吃了一顿饭。也许会有帮助!我想把它写在序言里。我做了另外10个练习,但这对我来说太难了。有什么办法吗 我的代码 s --> []. s --> [1],a. s --> [0],b. a --> [1],s. a --> [0],c. b --> [1],c. b --> [0],s. c --> [].
010001 = 4 - 2 = 2 (even)
我吃了一顿饭。也许会有帮助!我想把它写在序言里。我做了另外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.
这在很多情况下都是有效的,但我不确定它是否有效。这个问题可以通过一点数学大大简化 设
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].
stackoverflow的人不做家庭作业。如果你对你的锻炼有疑问,你应该告诉我们你到目前为止尝试了什么,以及哪些没有达到预期效果。你是对的!最简单的解决方案最难发明。