2013-04-03 3 views
-1

Это мое назначение ключ:Попытка решить простую Prolog назначение

Четыре драйвера: Norma, Энди, Эдвард, и Оливия были обвинены четыре нарушения правил дорожного движения: бег знак остановки, превышение скорости, что делает нелегальный левый поворот и запуск красного света. Используйте подсказки, чтобы узнать, какой закон нарушает каждый подозреваемый.

Улики

  1. Норма не бежать либо красный свет или знак остановки.
  2. Энди никогда не останавливался для ускорения.
  3. Эдвард совершил незаконный левый поворот.
  4. Оливия всегда была осторожна, чтобы остановиться на знаке остановки.

Мне нужно решить это с помощью пролога.

Я попытался следующий код до сих пор:

violatated(Violation):- 
member(Violation,[speeding,leftturn,stop,red]). 

solve(S):- 
S=[[Name1,Violation1], 
    [Name2,Violation2], 
    [Name3,Violation3], 
    [Name4,Violation4]], 

    %five drivers: Norma, Andy, Edward, Olivia 
Name1 = norma, 
Name2 = andy, 
Name3 = edward, 
Name4 = olivia, 

violated(Violation1), violated(Violation2), violated(Violation3), violated(Violation4), 
Violation1 \== Violation2, Violation1 \== Violation3, Violation1 \== Violation4, 
Violation2 \== Violation1, Violation2 \== Violation3, Violation2 \== Violation4, 
Violation3 \== Violation1, Violation3 \== Violation2, Violation3 \== Violation4, 
Violation4 \== Violation1, Violation4 \== Violation2, Violation4 \== Violation3, 

%Edward made an illegal left turn 
Violation3 == leftturn, 

%Norma did not run either a red light or a stop sign 
Violation1 \== red, 
Violation1 \== stop, 

%Andy was never stopped for speeding. 
Violation2 \== speeding, 

%Olivia was always careful to stop at a stop sign 
Violation4 \== stop. 

Простите за то, что новичок в прологе!

ответ

0

Я упростил ваш код немного:

solve(S):- 
    S=[[norma,Violation1], 
     [andy,Violation2], 
     [edward,Violation3], 
     [olivia,Violation4]], 

    permutation([speeding,leftturn,stop,red], [Violation1,Violation2,Violation3,Violation4]), 

    %Edward made an illegal left turn 
    Violation3 = leftturn, 

    %Norma did not run either a red light or a stop sign 
    Violation1 \= red, 
    Violation1 \= stop, 

    %Andy was never stopped for speeding. 
    Violation2 \= speeding, 

    %Olivia was always careful to stop at a stop sign 
    Violation4 \= stop. 

с этим:

?- solve(S). 
S = [[norma, speeding], [andy, stop], [edward, leftturn], [olivia, red]] ; 
false. 

но ваш код кажется нормально, просто опечатка исправить:

violated(Violation):- 
    member(Violation,[speeding,leftturn,stop,red]). 

вместо violatated(Violation):-

Смежные вопросы