0

我想删除在 Prolog 中满足我条件的第一个事实。

我试图删除其数量不等于我的目标的五个事实中的一个且仅一个。

我的目标是保留数字 4 的卡片。

cut 操作不适用于否定。

在一个明确的句子中,我想删除这个事实 (has(reem,blue,1)),这是第一个满足我条件的事实。

我怎么解决这个问题?

:- dynamic
        has/3, first/2.

has(reem,yellow,4).
has(reem,blue,1).
has(reem,red,5).
has(reem,green,4).
has(reem,blue,2).


deleteCard(Player,Goal):-
    retract(has(Player,_,Y)),not(Y=Goal),!.

start:-
   deleteCard(reem,4),
    displayAll(reem).

displayAll(Player):-
	nl,
	write('**LIST OF ALL CARDS YOU HAVE**'),
	nl,
	forall(has(Player,X,Y),(writeln(X+Y))).

4

1 回答 1

1

这是解决方案:

:- dynamic
        has/3.

has(reem,blue,2).
has(reem,blue,1).
has(reem,red,5).
has(reem,yellow,4).
has(reem,green,4).


deleteCard(Player,Goal):-
    has(Player,_,Y),not(Y=Goal),!,retract(has(Player,_,Y)).

start:-
   deleteCard(reem,4),
    displayAll(reem).

displayAll(Player):-
	nl,
	write('**LIST OF ALL CARDS YOU HAVE**'),
	nl,
	forall(has(Player,X,Y),(writeln(X+Y))).

于 2016-12-20T19:01:53.400 回答