我正在prolog中进行名册系统项目,并且正在使用基于我们教授提供的示例的修改的搜索和插入结构。但是,当我尝试运行它的实现时,即使没有其他元素存在,提供的记录列表也永远不会插入到名单中。我对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).
答案 0 :(得分:0)
也许只是改变最后一次通话:
..., searchinsert([A, B, C], X, 1).
因此X有机会被实例化为列表。但是你应该重新考虑数据流'您的进程/ 2驱动程序,可能它错过了一个参数。