我在Prolog中是乞讨人。我有自定义类型的鸟,鱼,动物。所以问题是我想传递诸如firstThree([owl,eagle,chicken,cat,dog])之类的函数。和 因为前三个是相同的数据类型,所以得到结果为真。例如:
public interface IUnitOfWork : IDisposable
{
#region Properties
Guid Id
{
get;
}
IDbConnection Connection
{
get;
}
IDbTransaction Transaction
{
get;
}
#endregion
#region Repositories
IAssetRepository Assets
{
get;
}
ITradeRepository Trades
{
get;
}
ISymbolRepository Symbols
{
get;
}
#endregion
#region Public Methods
void Begin();
void Commit();
void Rollback();
#endregion
}
这是我的基本数据:
firstThree([dog,cat,mouse,owl,shark,eagle]). > true
firstThree([shark,dog,owl,mouse]). > false
我已经尝试过了,但是它实际上没有用:
bird(eagle).
bird(chicken).
animal(cat).
animal(mouse).
animal(dog).
fish(shark).
fish(wheal).
fish(goldfish).
isSameType(X,Y):- bird(X),bird(Y);animal(X),animal(Y);fish(X),fish(Y).
答案 0 :(得分:0)
假设isSameType/2
在工作,
firstThree([H1,H2,H3|_]) :-
isSameType(H1, H2),
isSameType(H2, H3).
应该足够了,因为相等是可传递的(如果H1 = H2并且H2 = H3则H1 = H3)。
将来可能您应该尝试以下操作:
critter_type(Critter, bird) :- bird(Critter).
critter_type(Critter, animal) :- animal(Critter).
critter_type(Critter, fish) :- fish(Critter).
isSameType(X, Y) :- critter_type(X, Type), critter_type(Y, Type).