
8.4.6
Полный текст программы.
I
DOMAINS
pair =
pr(symbol,
integer)
listp
= pair*
list = symbol*
Iist2
= list*
int = integer ' •
listn = int*
PREDICATES
name(symbol,list)
1
getpair(symbol,int,listp,listn,listp,listn)
rebus(symbol,symbol,symbol,listn,listn,listn)
writex(listn,int)
revn(list,
listn, listp)
revs(list,
.list)
appends(list,list,list)
appendn(listn,listn,listn)
sumlist(list,list,list,int,listp,listn,
listp,listn)
len(listn,int)
tab(int)
rl(symbol,symbol,symbol,listn,listn,listn)
CLAUSES
len( [],0)
.
len([_|A]
,B)
:-len(A,C),B=C+1.
tab(O):-nl,!.
tab(A):-write("-"),B=A-1,tab(B).
name("",[]).
name(A,
[B|C])
:-frontchar(A,E,D),name(D,
C) ,
str_char(B,E).
getpair
(S,C,
[pr(S,A)
|St],Fr,
[pr(S,A)
|St],Fr)
:-
!,
A=C.
getpair(S,C,[A|Soot],Fre,[AISootN],FreeN):-
getpair(S,
C,
Soot,Fre,SootN,FreeN)
.
getpair(S,C,[],[C|FreeN],[pr
(S,C)],FreeN).
getpair(S,C,[],[AIFre],SootN,[A|FreeN]):-
getpair(S,C,[],Fre,SootN,FreeN).
revs(
[],[]).
revs([A|B],C):-revs(B,C1),
appends(Cl,[A],C).
revn(
[]
,
[]
/_)
•
revn([A|B],C,X):-revn(B,Cl,X),
getpair(A,Ar,X,[],X,[]),appendn(Cl,[Ar],
C)
appends([],X,X)
.
appends
([AIB],X,
[A|C]):-appends(B,X,C).
appendn([],X,X).
appendn([A|B],X,[A|C]):-appendn(B,X,C).
sumlist([],[],[],Per,A,B,A,B):-!,Per=0.
sumlist([],[],[B|Bx],Per,St,Fre,SNew,FNew):-!,
Bx=[],getpair(B,Per,St,Fre,
SNew,
FNew).
sumlist(A,
[],B,Per,Soot,Fre,Soot1,
Freel)
:-!,
sumlist([],A,B,Per,Soot,Fre,
Sootl,
Freel)
.
143