我知道我需要弄清楚自己的作业,但是看到班上没人能弄清楚它,我需要一些帮助。


编写Prolog程序,使p(X)
如果X是由n组成的列表,则为true
对于任何an+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/

10-11 07:29