用SWI Prolog解决爱因斯坦之谜



所以我试着通过使用我从这个网站上学到的教程来解决另一个爱因斯坦之谜。但是,我似乎没有得到答案。当我执行查询时,只有当我想知道哪对夫妇喜欢Violet时,它才返回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).

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

相关内容

  • 没有找到相关文章

最新更新