Вот мой код для моего задания, но он не работает правильно. Что нужно сделать, так это взять семейный факт в виде family(Title,[Name/Speed|_])
, как видно из первой строки кода, и произвести все возможные результаты известной мозаичной головоломки с фонариком. Однако все, что он говорит, является истинным или ложным, в зависимости от того, существует ли семейный факт или нет. Эта программа отлично работает, если все факты изложены, напримерпролог головоломка, не найдена ошибка
person(dad,1) person(mom,2) person(kid,5) person(granny,10)
, когда^в коде, а последний assert_family
устраняется код хороший. Так что это связано с тем, что assert_family
не используется правильно.
family(original, [father/1,mother/2,child/5,granny/10]).
moveFamily(Key,Journey, TotalTime):-
assert_family(Key),
findall(Person+Time, person(Person, Time), Left),
moveFamily(Left, [], Journey),
findall(Time, member([Time|_], Journey), LTime),
sumlist(LTime, TotalTime).
moveFamily([P1-T1, P2-T2], _, [[T, [P1-P2]]]):-
T is max(T1, T2).
moveFamily(Left, Right, [[LT, [P1-P2]],[RT, [P3]]|Journey]):-
select(P1-T1, Left, MLeft1),
select(P2-T2, MLeft1, MLeft2),
LT is max(T1, T2),
select(P3-RT, [P1-T1,P2-T2|Right], MRight),
moveFamily([P3-RT|MLeft2], MRight, Journey).
:- dynamic person/2.
assert_family(Key) :-
family(Key,List),
forall(member(N/V,List),
assertz(person(N,V))).
Что значит "не работает" означает? Вы не сказали нам, что такое задание или что не работает, поэтому невозможно сказать вам, почему. Пожалуйста, отредактируйте свой вопрос, чтобы предоставить недостающую информацию, чтобы на этом вопрос был дан ответ. Когда вы это сделаете, помните, что мы не можем читать ваши мысли или видеть ваши задания здесь - все, что мы знаем, это то, что вы нам рассказываете здесь. Благодарю. :) –
да нет проблем – user1204349
Должно ли 'Person + Time' не быть' Person-Time'? Это единственная проблема, которую я вижу. – twinterer