Новичок
Джуниор
Регистрация: 06.03.2012
Сообщений: 1
|
Самоизучение пролога
Здравствуйте друзья. У меня в университете начался пролог, но я серьёзно заболел, поэтому сижу дома, а отставать от группы не хочется. Поэтому изучаю его самостоятельно. Мне одногруппник скинул свои программы, помогите пожалуйста разобраться в них. Напишите пожалуйста что значит каждое предложение, а то в методичке не понятно написано.
1.
Код:
Код:
/*Преобразовать введенную строку в список слов, упорядоченных лексикографически.*/
domains
token_list=string*
predicates
scan_token(string,token_list)
sort(token_list,token_list)
insert(string,token_list,token_list)
clauses
scan_token(Str,[Head|Tail]) :-
fronttoken(Str,Head,Str1),!,
scan_token(Str1,Tail).
scan_token(_,[]).
sort([],[]).
sort([A|L],R):-
sort(L,R1),
insert(A,R1,R).
insert(A,[B|L],[B|L1]):-
A>B,!,
insert(A,L,L1).
insert(A,L,[A|L]).
goal
%Str="я пошел гулять",
Str="qwerty ui op asdf ghjkl z xcv b nm",
scan_token(Str,L),
sort(L,Res),write(Res),nl.
2.
Код:
/*Создать БД, содержащую сведения о пассажирах:
Ф.И.О., количество мест, вес багажа.
Определить, есть ли пассажиры, багаж которых занимает 1 место и вес багажа больше 30 кг.*/
domains
i=integer
database
reader(symbol,i,i)
counter(i)
predicates
wr(i,i,i)
nondeterm repeat
nondeterm inbase
nondeterm count(i,i)
clauses
repeat. repeat :- repeat.
count(X,Y) :-
counter(X),
Y=X+1,
retract(counter(X)),
assert(counter(Y)).
inbase :- repeat,
write('&'),
readln(Name),
readint(Kol),
readint(Ves),
assert(reader(Name,Kol,Ves)),
count(_,Y),Y=5.
wr(K,VV,Y) :-
retract(reader(_,K,V)),V>VV,
count(Y,Y1), wr(K,V,Y1),!.
wr(_,_,Y) :- counter(Y),
write("Количество=",Y),!.
goal
assert(counter(0)), inbase,
save("reader.dba"),
asserta(counter(0)), wr(1,30,Y).
|