2016-04-23 65 views
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). 

回答

0

也许只是改变了最后一个电话:

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

所以X需要为实例,以列表的机会。但是您应该重新思考流程/ 2驱动程序的“数据流”,可能缺少一个参数。

+0

你认为我可能错过了什么论点?我进入过程/ 2驱动程序的唯一信息是名册本身。 –

+0

在Prolog中,变量是'分配一次'。所以,也许你需要另一个传递给process/2的变量,它应该得到更新的名单。 – CapelliC