yauhsien 写道:你要队名就直接列在facts中。例如
team('Shouryuken', 'Ryu', 'Ken'). %Ryu, Ken列在Shouryuken队
至於最后的等级判断, challenger 这个等级很容易定义,但是,所谓 grand_fighter 若按照现在这个判断,只赢一个、两个也叫做 grand_fighter ,这样不正确。至少也该是打倒每一队至少一人
- 代码:
class( X, grand_fighter) :-
team(T,X),
setof(T1, (team(T1,_,_), T1 \= T), Ts),
forall((member(T1,Ts), team(T1,Y,Z)),
(beat(X,Y); beat(X,Z))).
team(T,X) :-
team(T,X,_), !.
team(T,X) :-
team(T,_,X).
至於 loser 名号,大概没问题。
BillZhan 写道:(還未編隊名)
team(teamate(ryu),
teamate(ken)).
team(teamate(lee),
teamate(chunli)).
team(teamate(eagle),
teamate(birdie)).
team(teamate(sagat),
teamate(adon)).
team(teamate(zangief),
teamate(honda)).
team(teamate(dhalsim),
teamate(blanka)).
team(teamate(guile),
teamate(cammy)).
team(teamate(balrog),
teamate(bison)).
team(teamate(long),
teamate(hawk)).
team(teamate(gouki),
teamate(vega)).
beat( ryu, lee).
beat( lee, eagle).
beat( eagle, sagat).
beat( sagat, zangief).
beat( zangief, dhalsim).
beat( dhalsim, guile).
beat( guile, balrog).
beat( balrog, long).
beat( long, ken).
beat( ken, chunli).
beat( cuunli, birdie).
beat( honda, adon).
beat( adon, blanka).
beat( blanka, cammy).
beat( cammy, bison).
beat( hawk, bison).
beat( gouki, cammy).
beat( vega, bison).
class( X, challenger) :- beat( X, _), beat(_, X).
class( X, grand fighter) :- beat(X, _), \+ beat(_, X).
class( X, loser) :- beat(_, X), \+ beat(X, _).
簡略版寫成像是這樣子(隊伍名稱暫時簡短化)
-------------------------------------
team(teamate(ryu),
teamate(ken)).
team(teamate(lee),
teamate(chunli)).
team(teamate(eagle),
teamate(birdie)).
team(teamate(sagat),
teamate(adon)).
team(teamate(zangief),
teamate(honda)).
team(teamate(dhalsim),
teamate(blanka)).
team(teamate(guile),
teamate(cammy)).
team(teamate(balrog),
teamate(bison)).
team(teamate(long),
teamate(hawk)).
team(teamate(gouki),
teamate(vega)).
team('a', 'ryu', 'ken').
team('b', 'lee', 'chunli').
team('c', 'eagle', 'birdie').
team('d', 'sagat', 'adon').
team('e', 'zangief', 'honda').
team('f', 'dhalsim', 'blanka').
team('g', 'guile', 'cammy').
team('h', 'balrog', 'bison').
team('i', 'long', 'hawk').
team('j', 'gouki', 'vega').
beat( ryu, lee).
beat( lee, eagle).
beat( eagle, sagat).
beat( sagat, zangief).
beat( zangief, dhalsim).
beat( dhalsim, guile).
beat( guile, balrog).
beat( balrog, long).
beat( long, ken).
beat( ken, chunli).
beat( cuunli, birdie).
beat( honda, adon).
beat( adon, blanka).
beat( blanka, cammy).
beat( cammy, bison).
beat( hawk, bison).
beat( gouki, cammy).
beat( vega, bison).
class( X, challenger) :- beat( X, _), beat(_, X).
class( X, grandfighter) :- beat( X, _), !.
class( X, loser) :- beat(_, X), \+ beat(X, _).
class( X, grand_fighter) :-
team(T,X),
setof(T1, (team(T1,_,_), T1 \= T), Ts),
forall((member(T1,Ts), team(T1,Y,Z)),
(beat(X,Y); beat(X,Z))).
team(T,X) :-
team(T,X,_), !.
team(T,X) :-
team(T,_,X).
------------------------------
不知道能不能跑出來