需要帮助在序言中编写列表
Need help for programming a list in prolog
我希望 Prolog return 仅当列表是用字母 {a,b} 构建并且它只有一个字母 b 或零次字母 b 和任意数量的字母 a 时才为真但空列表也是如此。例如:{} 为真,{aaabaaa} 为真,{a} 或 {b} 为真,{baaaaa} 为真。但是{baaaab}是假的,{bb}是假的。
这是我尝试做的,但它没有像我想要的那样工作:
语言([]).
语言([a,b]).
语言([a | S]):-
语言(S).
您可以想象一个消耗其输入的状态机。它有 2 种状态,一种是您可以“吃掉”任意数量的 a
,如果它消耗了所有输入则成功。如果在那个状态下你消耗了一个 b
你会进入第二个状态,它只接受任意数量的 a
s 并且如果它消耗所有输入再次成功:
% state 1:
as_or_b([]).
as_or_b([a|L]):- as_or_b(L).
as_or_b([b|L]):- as(L).
% state 2:
as([]).
as([a|L]):- as(L).
样本运行:
?- as_or_b([]).
true.
?- as_or_b([a]).
true.
?- as_or_b([b]).
true.
?- as_or_b([a,a,b,a,a]).
true.
?- as_or_b([a,a,b,a,a,b]).
false.
我希望 Prolog return 仅当列表是用字母 {a,b} 构建并且它只有一个字母 b 或零次字母 b 和任意数量的字母 a 时才为真但空列表也是如此。例如:{} 为真,{aaabaaa} 为真,{a} 或 {b} 为真,{baaaaa} 为真。但是{baaaab}是假的,{bb}是假的。
这是我尝试做的,但它没有像我想要的那样工作:
语言([]).
语言([a,b]).
语言([a | S]):- 语言(S).
您可以想象一个消耗其输入的状态机。它有 2 种状态,一种是您可以“吃掉”任意数量的 a
,如果它消耗了所有输入则成功。如果在那个状态下你消耗了一个 b
你会进入第二个状态,它只接受任意数量的 a
s 并且如果它消耗所有输入再次成功:
% state 1:
as_or_b([]).
as_or_b([a|L]):- as_or_b(L).
as_or_b([b|L]):- as(L).
% state 2:
as([]).
as([a|L]):- as(L).
样本运行:
?- as_or_b([]).
true.
?- as_or_b([a]).
true.
?- as_or_b([b]).
true.
?- as_or_b([a,a,b,a,a]).
true.
?- as_or_b([a,a,b,a,a,b]).
false.