如何编写校验{a,b}组成列表规则的Prolog程序
Prolog实现{a,b}字符列表规则匹配解决方案
需求说明
- 处理仅由字符
a、b组成的列表 - 满足以下两个条件时返回
true:- 列表中至少包含1个
a - 列表恰好以1个
b结尾,末尾不能有多个b也不能没有b
- 列表中至少包含1个
参考示例验证
- 符合规则:
aaab - 不符合规则:
aba(末尾为a)、b(无a)、a(无末尾b)
原有代码问题分析
你当前的代码仅能匹配任意数量a组成的列表,没有对末尾唯一b、至少一个a的限制:
langage([]). langage([a | S]):- langage(S).
解决方案代码
% 基础规则:最小符合场景为至少一个a加末尾b,即[a,b] langage([a, b]). % 递归规则1:合法列表头部可以追加任意数量的a langage([a | S]) :- langage(S). % 递归规则2:合法列表头部可以追加任意数量的b(不会出现在末尾) langage([b | S]) :- langage(S).
测试验证
直接在Prolog终端执行查询即可验证效果:
langage([a,a,a,b]).返回truelangage([a,b,a]).返回falselangage([b]).返回falselangage([a]).返回falselangage([b,a,b]).返回true(符合要求:有a、末尾仅一个b)langage([a,a,b,b]).返回false(末尾有2个b)
内容的提问来源于stack exchange,提问作者Nobody
相关产品推荐
相关产品推荐

