Решение загадки Эйнштейна с помощью SWI Prolog

Поэтому я попытался решить еще одну головоломку Эйнштейна, используя учебник, который я сам изучил на этом сайте. Но, кажется, я не получаю ответа. Когда я делаю запрос, он возвращает 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).

person user3702537    schedule 03.06.2014    source источник


Ответы (1)


Одна из проблем в вашем коде заключается в том, что вы используете переменные там, где вы должны использовать атомы для представления битов информации, которые у вас есть из подсказок головоломки. Например, у вас exist(couple(_,_,_,_,_Skoda,_,ModernComedy,_),Couples) вместо exist(couple(_,_,_,_,_skoda,_,modern_comedy,_),Couples). Таким образом, ваша переменная LikeViolet в вашем запросе никогда не будет создана с ответом, который вы ищете.

person Paulo Moura    schedule 03.06.2014