Я новичок в Прологе, и у меня есть, вероятно, простая проблема с куском кода. Это проблема реального мира, которая возникла в прошлую пятницу, и поверьте мне, это не домашняя работа CS.
Мы хотим напечатать визитные карточки, которые можно печатать только блоками по 900 карточек (100 листов по 9 карточек на лист). Карты никому не следует распределять по нескольким блокам. Люди заказывали разное количество карточек, Е.Г .:
% "braucht" is german and means "needs"
braucht(anton,400).
braucht(berta,200).
braucht(claudia,400).
braucht(dorothee,100).
braucht(edgar,200).
braucht(frank,400).
braucht(georg,100).
Я собрал следующее определение, чтобы найти подходящий блок из 900 визитных карточек:
block(0,[]).
block(N,[H|T]) :-
braucht(H,Nh),
% \+(member(H,T)),
D is N - Nh,
D >= 0,
block(D,T).
Это дает хороший список блоков людей, чьи карты помещаются вместе в блок из 900 карт. Но он перестает работать, если я активирую закомментированную строку «\ + member ....» и просто выдает мне «false». Но я должен заверить, что никто не получает более одного раза в этом блоке. Что я тут не так делаю?