Я новичок в GProlog, и у меня есть школьный проект о проблеме квадратной упаковки (упаковка квадратов в главный квадрат).
bool_to_int(B, I) :-
B -> I = 1; I = 0.
sum_size([], [], _, 0).
sum_size([X|Xs], [T|Ts], V, S) :-
sum_size(Xs, Ts, V, S2),
bool_to_int(X #=< V #/\ V #< X + T, I),
S #= S2 + T * I.
Это независимая часть моего кода, егоЦель состоит в том, чтобы оптимизировать решение проблемы упаковки квадратов, проверяя, равна ли сумма выровненных квадратов заданной константе (здесь она называется S).X - это позиции X квадратов субквадрат для упаковки в главный квадрат, а Ts - их размер.
Вот моя проблема с этим кодом:
sum_size([0, 0, 1, 2, 2, 2], [2, 1, 1, 1, 1, 1], 0, 3).
-> true
В этомНапример, главная площадь 3х3.Итак, это ожидаемый ответ, чтобы упаковать все вложенные квадраты в основной: [0, 0, 1, 2, 2, 2] являются действительными координатами.
Теперь я хочу, чтобы GProlog решилэто для меня, написав это:
length(L, 6), sum_size(L, [2, 1, 1, 1, 1, 1], 0, 3).
-> no
И я не понимаю, почему ответ «нет» вместо того, чтобы дать мне возможное значение для L.