插入列表列表pr

时间:2016-04-23 00:21:08

标签: prolog

我正在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).

1 个答案:

答案 0 :(得分:0)

也许只是改变最后一次通话:

..., searchinsert([A, B, C], X, 1).

因此X有机会被实例化为列表。但是你应该重新考虑数据流'您的进程/ 2驱动程序,可能它错过了一个参数。