Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2012, 06:15   #1
Sinigr
Новичок
Джуниор
 
Регистрация: 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).
Sinigr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц