Лифп / Лабораторная работа №3
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ КЫРГЫЗСКОЙ РЕСПУБЛИКИ
КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ ИМ. И. РАЗЗАКОВА
Лабораторная работа
Бишкек 2023
Лабораторная работа №3
Поменять местами первое и последнее слово.
Листинг кода:
domains
str=string
predicates
main(str,str)
p(str,str,str,str)
clauses
main(A,B):-fronttoken(A,C,D),p(D,"","",E),concat(E,C,B).
p(A,B,C,D):-fronttoken(A,E,F),!,concat(C,B,G),concat(E," ",H),p(F,H,G,D).
p(_,A,B,C):-concat(A,B,C).
goal
main("Pervoe Slovo, Vtoroe",Str1).
Фото результат:
Объяснение кода
Предикат main(A, B) принимает два аргумента, представленных как «A» и «B». Далее используется предикат fronttoken(A, C, D), чтобы разделить входную строку «A» на две части: «C – первую часть» и «D – оставшуюся часть». Затем вызывается предикат p(D,"","",E) с "D", двумя пустыми строками и переменной "E". Затем результат предиката p(D,"","",E) и в concat(E,C,B) объединяется с "C" для создания окончательной выходной строки, хранящейся в "B".
Предикат p(A,B,C,D) принимает четыре аргумента: "A", "B", "C" и "D". Далее предикат p использует предикат fronttoken(A,E,F), чтобы разделить входную строку «A» на две части: «E» и «F». Предикат concat(C,B,G) объединяет "C" и "B" для получения строки "G". Затем concat(E," ",H) объединяет «E» и символ пробела, чтобы получить «H». Затем предикат p(F,H,G,D) вызывается с помощью "F", "H", "G" и "D". Этот процесс продолжается до тех пор, пока fronttoken(A,E,F) не вернет пустую строку из за "!" символа, который используется для остановки возврата. В этом коде он используется в предложении p(A,B,C,D), чтобы остановить дальнейший возврат после того, как будет найдено первое совпадение. Это означает, что после того, как совпадение найдено и конкатенация выполнена, Пролог не будет пытаться найти другое совпадение, даже если в базе данных есть другие возможные совпадения.
Заключительное предложение для предиката p(_,A,B,C) объединяется в предикате concat(A,B,C) "A" и "B" для получения результата "C".
Наконец, определяется цель вызова предиката main("Pervoe Slovo, Vtoroe",Str1) с входной строкой «Первое Слово, Второе» и переменной «Str1». Результатом цели является значение, хранящееся в «Str1».