在序言中链接排他性语句的好方法是什么?

时间:2019-04-28 15:14:49

标签: prolog

我们被要求在一次考试中编写一个基于菜单的计算器,一旦完成所需的计算,我们就将控制权返回到菜单。

我写了以下代码作为解决方案,尽管教授认为它是正确的,但我仍然认为在table(A,N)的第一个子句返回false之后,必须有一种更好的方法将控制权返回到菜单。 请注意,我已经删除了很多与我的问题无关的原始代码。


    menu :-
      write('Enter a choice: '),
      read(C),
      choice(C).

    choice(1) :-
      table(5).

    table(N) :- 
      A is 1,
      start(A,N).

    table(A,N) :- 
      K is A*N, 
      write(K), 
      nl, 
      A1 is A+1, 
      A1=<10,
      table(A1, N)
      ; 
      menu.

我对序言很陌生,因此该问题的措词可能不恰当。如果是这样,请告诉我。

1 个答案:

答案 0 :(得分:0)

您可以使用repeat/0永久循环。

menu :-
      repeat, % add this line
      write('Enter a choice: '),
      read(C),
      choice(C).

    choice(1) :-
      table(5).

    table(N) :- 
      A is 1,
      start(A,N).

    table(A,N) :- 
      K is A*N, 
      write(K), 
      nl, 
      A1 is A+1, 
      A1=<10,
      table(A1, N).
      % ;     % delete this line
      % menu. % delete this line