我知道我需要弄清楚自己的作业,但是看到班上没人能弄清楚它,我需要一些帮助。
编写Prolog程序,使p(X)
如果X
是由n
组成的列表,则为true
对于任何a
,n+1
后跟b
n >= 1
。
最佳答案
您应该使用计数器来跟踪到目前为止所发现的内容。找到b
时,将其添加到计数器。找到a
时,减去一个。遍历整个列表后,计数器的最终值应为1,因为您希望b
的数量比a
的数量多1。这是一个如何用代码编写示例:
% When we see an "a" at the head of a list, we decrement the counter.
validList([a|Tail], Counter) :-
NewCounter is Counter - 1,
validList(Tail, NewCounter).
% When we see an "b" at the head of a list, we increment the counter.
validList([b|Tail], Counter) :-
NewCounter is Counter + 1,
validList(Tail, NewCounter).
% When we have been through the whole list, the counter should be 1.
validList([], 1).
% Shortcut for calling the function with a single parameter.
p(X) :-
validList(X, 0).
现在,这几乎可以完成您想要的所有工作-它与所有
n >= 0
的规则匹配,而您希望所有n >= 1
的规则匹配。以典型的作业回答方式,我将最后一点留给您添加自己。关于prolog - 序言:识别n> = 1的a ^ n b ^(n + 1)语言,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2313577/