【问题标题】:Solving Einstein Riddle with SWI Prolog用 SWI Prolog 解决爱因斯坦之谜
【发布时间】:2014-06-03 10:02:44
【问题描述】:

所以我尝试通过使用我从这个网站学到的教程来解决另一个爱因斯坦谜题。但是,我似乎没有得到答案。当我查询时,只有当我想知道哪对夫妇喜欢紫罗兰时才返回true。

    exist(A, (A,_,_,_,_,_,_,_)).
    exist(A, (_,A,_,_,_,_,_,_)).
    exist(A, (_,_,A,_,_,_,_,_)).
    exist(A, (_,_,_,A,_,_,_,_)).
    exist(A, (_,_,_,_,A,_,_,_)).
    exist(A, (_,_,_,_,_,A,_,_)).
    exist(A, (_,_,_,_,_,_,A,_)).
    exist(A, (_,_,_,_,_,_,_,A)).

    borrowed(B,C, (B,_,_,_,_,_,_,C)).
    borrowed(B,C, (_,B,_,_,_,_,_,C)).
    borrowed(B,C, (_,_,B,_,_,_,_,C)).
    borrowed(B,C, (_,_,_,B,_,_,_,C)).
    borrowed(B,C, (_,_,_,_,B,_,_,C)).
    borrowed(B,C, (_,_,_,_,_,B,_,C)).
    borrowed(B,C, (_,_,_,_,_,_,B,C)).

    solution(LikeViolet) :- Couples = (couple(_H1,_W1,_S1,_E1,_C1,_CL1,_B1,_BR1),                                                                                 couple(_H2,_W2,_S2,_E2,_C2,_CL2,_B2,_BR2), 
                couple(_H3,_W3,_S3,_E3,_C3,_CL3,_B3,_BR3), couple(_H4,_W4,_S4,_E4,_C4,_CL4,_B4,_BR4), 
                couple(_H5,_W5,_S5,_E5,_C5,_CL5,_B5,_BR5), couple(_H6,_W6,_S6,_E6,_C6,_CL6,_B6,_BR6), 
                couple(_H7,_W7,_S7,_E7,_C7,_CL7,_B7,_BR7), couple(_H8,_W8,_S8,_E8,_C8,_CL8,_B8,_BR8)),



    exist(couple(_,_Daniella,_Black,_ShopAsst,_,_,_,_),Couples),

    exist(couple(_,_,_,_,_Fiat,_Red,_Seadog,_),Couples),

    exist(couple(_Owen,_Victoria,_,_,_,_Brown,_,_),Couples),

    exist(couple(_Stan,_Hannah,_Horricks,_,_,_White,_,_),Couples),

    exist(couple(_,_Jenny,_Smith,_WarehouseManager,_Wartburg,_,_,_),Couples),

    borrowed(couple(_Alexander,_Monica,_,_,_,_,_,_),couple(_,_,_,_,_,_,_,Grandfather),Couples),

    exist(couple(_Mathew,_,_,_,_,_Pink,MulatkaGabriela,_),Couples),

    exist(couple(_Oto,_Irene,_,_Accountants,_,_,_,_),Couples),

    borrowed(couple(_,_,_,_,_Trabant,_,_,_),couple(_,_,_,_,_,_,_,_WeWereFive),Couples),

    exist(couple(_,_,_Cermaks,_TixCollect,_,_,_ShedStoat,_),Couples),

    borrowed( couple(_,_,_Kurils,_Doctors,_,_,_,_),couple(_,_,_,_,_,_,_,SlovackoJudge),Couples),

    exist(couple(_Paul,_,_,_,_,_Green,_,_),Couples),

    exist(couple(_,_Veronica,_Dvorak,_,_,_Blue,_,_),Couples),

    exist(couple(_Rick,_,_,_,_Ziguli,_,SlovackoJudge,_),Couples),

    borrowed( couple(_,_,_,_,_,_,_DameCamissar,_),couple(_,_,_,_,_,_,_,MulatkaGabriela),Couples),

    exist(couple(_,_,_,_,_Dacia,Violet,_,_),Couples),

    borrowed( couple(_,_,_,_Teachers,_,_,_,_),couple(_,_,_,_,_,_,_,_DameCommissar),Couples),

    exist(couple(_,_,_,_Agriculturalist,_Moskvic,_,_,_),Couples),

    exist(couple(_,Pamela,_,_,_Renault,_,Grandfather,_),Couples),

    borrowed(couple(_,Pamela,_,_,_,_,_,_),couple(_,_,_Zajac,_,_,_,_,_),Couples),

    borrowed(couple(_Robert,_,_,_,_,_Yellow,_,_),couple(_,_,_,_,_,_,_,ModernComedy),Couples),

    exist(couple(_,_,_Swain,_Shoppers,_,_,_,_),Couples),

    exist(couple(_,_,_,_,_Skoda,_,ModernComedy,_),Couples),

    exist(couple(_,_,LikeViolet,_,_,Violet,_,_),Couples).

【问题讨论】:

    标签: prolog zebra-puzzle


    【解决方案1】:

    您的代码中的一个问题是您使用了变量,而您应该使用原子来表示您从谜题线索中获得的信息位。例如,您拥有exist(couple(_,_,_,_,_Skoda,_,ModernComedy,_),Couples) 而不是exist(couple(_,_,_,_,_skoda,_,modern_comedy,_),Couples)。因此,您查询中的 LikeViolet 变量将永远不会被您正在寻找的答案实例化。

    【讨论】:

      猜你喜欢
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 2011-05-24
      • 2016-12-20
      • 2015-09-15
      • 2012-06-22
      • 1970-01-01
      相关资源
      最近更新 更多