指定された位置に要素を挿入し、その結果、リスト内の残りの要素の位置番号を変更する Predicate を Prolog でプログラムする必要があります。私が達成したのは、リストの最後に要素を挿入する Predicate を実装する次のコード スニペットです。データベース部門では、LIST とは別に、リスト内の要素の量を示す LONG もあります。最後に、述語を実装しようとするコードがいくつかあります。何が問題なのか誰か教えてもらえますか? 私はここで迷っています。
Domains
name=symbol
position=integer
element=integer
Database
list(name,position,element)
long(name,integer)
Predicates
nondeterm inserirf(element)
Clauses
list(b,1,1).
list(b,2,5).
list(b,3,8).
list(b,4,3).
long(b,4).
inserirf(V):-
long(b,X),
Y=X+1,
assertz(list(b,Y,V)),
assertz(long(b,Y)),
retract(long(b,X)),
long(b,Q),
list(b,Q,P),
write(P),nl.
Goal
inserirf(7).
私の最後の試み:
Predicates
nondeterm inserirl(nom,pos,element)
Clauses
list(b,1,1).
list(b,2,5).
list(b,3,8).
list(b,4,3).
list(b,5,10).
list(b,6,11).
long(b,6).
inserirl(L,Pos,E):-
long(L,Long),
Pos > Long,
NouLong = Long+1,
retract( long(L,Long) ),
assertz( list(L,Pos,NouLong) ),
assertz( long(L,NouLong) ).
inserirl(L,Pos,E):-
long(L,X),
XaPassar=X-1,
retract(llista(L,Pos,E)),
retract( long(L,X) ),
assertz( long(L,XaPassar) ),
inserirl(L, XaPassar,E),
long(L,Y),
Y2=Y+1,
retract( long(L,Y) ),
assertz( long(L,Y2) ),
assertz(llista(L,Pos,E)).
Goal
inserirl(b,3,9).
% 3 -> position
% 9 -> element
% b -> name of list
何百もの助けに感謝します。