0
私はプロローグのロスタシステムプロジェクトに取り組んでいます。変更された検索を使用し、教授が提示した例に基づいて構造を挿入しています。しかし、私が実装を実行しようとすると、他の要素がない場合でも、提供されたレコードリストは決してロスタに挿入されません。私はプロローグにあまり慣れていないので、この問題は私をループに投げかけています。次のように検索/挿入方法のリストのリストにプロローグを挿入する
私の実装では、次のとおり
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では、変数は「assign once」です。ですから、/ 2に渡された別の変数が必要になるかもしれません。更新されたロスタを取得する必要があります。 – CapelliC