检查列表的前三个元素是否为相同的数据类型。

时间:2019-06-07 13:55:05

标签: prolog

我在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).

1 个答案:

答案 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).