首页 文章

规则在prolog中分组两个事实?

提问于
浏览
1

我正在为伦敦管编写代码 . 我已经声明了显示电台名称以及它所在的线路的事实 . 例如

station(aldgate,metropolitan).
station(brixton,victoria).
station(baker,metropolitan).

我正在尝试制定一个规则来检查两个站是否在同一条线上,以及哪条线 . 例如, aldgatebaker 位于同一行 metropolitan .

有任何想法吗?

1 回答

  • 3

    我正在尝试制定一条规则,检查两个工作站是否在同一条线上,以及哪条线 .

    一个例子可以是以下规则

    sameLine(Stat1, Stat2, Line) :-
      station(Stat1, Line),
      station(Stat2, Line),
      Stat1 \= Stat2.
    

    这很灵活 .

    它可以检查几个站是在同一行(调用 sameLine(aldgate, baker, metropolitan) 返回true,调用 sameLine(aldgate, baker, Line) 返回true并统一 Linemetropolitan )但可以找到一对线的站点(调用 sameLine(Stat1, Stat2, metropolitan) 返回true两次,用 aldgate 统一 Stat1Stat2baker (第一次),反之亦然(第二次)) .

    遵守约束

    Stat1 \= Stat2.
    

    这是两个站不同的强加 .

    如果你希望 sameLine(aldgate, aldgate, Line) 返回true与 metropolitan 统一 Line ,你可以删除它 .

    如果您,否则,想要避免双重结果( aldgate / bakerbaker / aldgate ,例如,调用 sameLine(Stat1, Stat2, metropolitan) ),您可以强制 Stat1 不仅与 Stat2 不同,而且"before" Stat2 ,取而代之

    Stat1 \= Stat2
    

    Stat1 @< Stat2
    

    但是,通过这种方式,您从 sameLine(aldgate, baker, Line) 获得true,但从 sameLine(baker, aldgate, Line) 获得false(因为 baker 不是"before" aldgate ) .

相关问题