Я работаю над системным проектом реестра в прологе и использую модифицированную структуру поиска и вставки, основанную на примере, представленном нашим профессором. Однако, когда я пытаюсь запустить его реализацию, предоставленный список записей никогда не включается в список, даже если других элементов нет. Я не очень хорошо знаком с прологом, и эта проблема бросает меня за цикл.Внесение в список списков пролог
Моя реализация метода поиска/вставки следующим образом:
search(_, [], 0).
search([X,_,_], [[X, _, _]|_], 1).
search([_,Y,_], [[_, Y, _]|_], 1).
search([X,Y,Z], [[_, _, _]|T], C) :- search([X, Y, Z], T, C).
searchinsert([X, Y, Z], L, L) :- search([X, Y, Z], L, 1).
searchinsert([X, Y, Z], L, [[X, _, _] | L]) :- search([X, Y, Z], L, 0).
searchinsert([X, Y, Z], L, [[_, Y, _] | L]) :- search([X, Y, Z], L, 0).
В соответствии с планом, он должен отказаться от предоставленного списка записей, если первый или второй элемент совпадающее другого элемента в списке. Эта функция вызывается следующим образом:
process(4, X) :-
nl,
write('\tInsert student into roster.'), nl,
read_student_info([A, B, C]),
nl, nl, searchinsert([A, B, C], X, X).
Какой аргумент, по-вашему, я могу пропустить? Единственная информация, которую я веду в драйвер process/2, - это сам список. –
В Prolog переменные «присваивают один раз». Итак, может быть, вам понадобится другая переменная, переданная процессу/2, которая должна получить обновленный список. – CapelliC