我已经阅读了有关此主题的一些主题,但我无法让它发挥作用。假设我有以下谓词:
wins(L,K,X):-member(X,L),X>=K.
wins(L,K,X):-member(X,L),X<K,K1 is K-X,\+wins(L,K1,_).
它的作用并不重要,例如:
?- wins([1,4],1,X).
X = 1;
X = 4;
false.
现在,这个谓词帮助我检查是否可以实现某些条件并提供允许实现此目的的数字。没关系,但现在我只想得到第一个asnwer,这是X = 1
,然后让Prolog停止搜索。但是,我无法使用!
,因为它找到X = 1
并返回false
。我需要它返回true
,以防我有基于结果X的其他以下条件,如:
play(L,K,X):- member(X,L),K1 is K-X,K1>0,wins(L,K1,Y),K2 is K1-Y, ...
然后在...
我希望能够使用来自win
谓词的仅第一个结果。我需要使用SWI-Prolog。
谢谢!
修改
也许我应该进一步扩展它,因为once()
正在运行,但并不完全符合我的意愿。我的意思是,如果我想等待用户输入,请说:
play(L,K,X):-
member(X, L),
K1 is K-X,
K1 > 0,
once(wins(L, K1, Y)),
K2 is K1 - Y,
write('Something: '),
read(Z),
...
在输出的情况下,我会得到:
Something: |:
在我按下文本的任何部分(读取Z)之后,让我们说'THIS'
,它就像:
SomethingTHIS
。
我的意思是,输入到输出中的前一个文本的某些部分会消失(在这种情况下,它会丢失': '
。)
任何想法我怎么能解决这个问题?