0
我正在研究序言中的名册系统项目,并且正在使用基于我们教授提供的示例的修改后的搜索和插入结构。但是,当我尝试运行它的实现时,即使没有其他元素存在,提供的记录列表也不会插入到名册中。我对prolog并不是很熟悉,这个问题让我想起了一个循环。插入列表的序言序言
我的搜索/插入方法的实施如下:
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).
你认为我可能错过了什么论点?我进入过程/ 2驱动程序的唯一信息是名册本身。 –
在Prolog中,变量是'分配一次'。所以,也许你需要另一个传递给process/2的变量,它应该得到更新的名单。 – CapelliC