Prolog 如何允许程序继续?

Prolog 如何允许程序继续?,prolog,Prolog,出现false后,如何使程序进入menu1/0 mylist([a,b,c]). myprog(X) :- mylist(L), member(X, L). go :- start_message,menu1. start_message :- write('This is a program.'),nl, write('Below are a list:'),nl, myprog(X), write(X),nl, fail. menu1 :-

出现
false
后,如何使程序进入
menu1/0

mylist([a,b,c]).
myprog(X) :- mylist(L), member(X, L).

go :- start_message,menu1.

start_message :- 
    write('This is a program.'),nl,
    write('Below are a list:'),nl,
    myprog(X), 
    write(X),nl, 
    fail.

menu1 :-
    nl,write('Select operation:'),nl,
    write('1. Input time'),nl,
    write('2. Exit program'),nl.
以下是我一直坚持的观点:

go.
This is a program.
Below are a list:
a
b
c
false

删除
start\u消息最后一行中的
fail
语句

start_message :- 
    write('This is a program.'),nl,
    write('Below are a list:'),nl,
    ( myprog(X),
      write(X),nl, 
      fail
    ; true ).

现在,当
myprog/1
无法再成功时,控制转到
true/0
并且
start\u message/0
成功。

您可以检查如何使用if-then-else。很好,从
go:-start\u message,菜单1
?但我会提到如果那样的话。。。那应该行得通。我看得太快了。问题是
start\u message/0
刚刚失败,所以
go/0
也失败了。@TomasBy我真的很抱歉,但仍然对此一无所知<代码>开始消息:-write('这是一个程序')、nl、write('下面是一个列表:')、nl、myprog(X)、write(X)、nl、(fail->(menu1;go)).
这是我想到的,但仍然不起作用。将
失败
置于该条件下是没有用的。这样你就不会得到列表中的所有元素。是的,我需要得到所有元素。我知道,我一直有问题。那些内置谓词…我必须了解更多。谢谢,你给了我很大的帮助!