Лабораторная работа №4. Работа со строками

4.1. Создайте предикат, проверяющий, является ли данная строка палиндромом.

pal([],""):-!.

pal(Str,Newstr):-

Str=[H|T],

pal(T,RT),

append(RT,[H],Newstr).

Работа в прологе

ā% library(win_menu) compiled into win_menu 0.00 sec, 29 clauses

% c:/documents and settings/student/application data/swi-prolog/pl.ini compiled 0.00 sec, 1 clauses

% c:/Documents and Settings/Student/Рабочий стол/aa.pl compiled 0.00 sec, 3 clauses

Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 6.2.0)

Copyright (c) 1990-2012 University of Amsterdam, VU Amsterdam

SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,

and you are welcome to redistribute it under certain conditions.

Please visit http://www.swi-prolog.org for details.

1. ?- pal("Привет",X), string_to_list(Y,X).

X = [1090, 1077, 1074, 1080, 1088, 1055],

Y = "тевирП".

4.2. Дано предложение найти самое короткое слово в нём.

min(X,Y,X):- X<Y,!.

min(_,X,X).

str_min(Str1, Str2, Str1):-

length(Str1, Length1),

length(Str2, Length2),

min(Length1,Length2,Length1),!.

str_min(_, Str, Str).

list_str_min([],_):-!.

list_str_min(List, Min):-

List=[First|AllWords],

list_str_min(AllWords, MinfromAllWords),

str_min(First, MinfromAllWords, Min).

list_of_words([],[]):-!.

list_of_words(Str, ListofWords):-

append(FirstWord, [32|Tile],Str),!,

list_of_words(Tile, ListofTile),

ListofWords=[FirstWord|ListofTile].

list_of_words(Word, [Word]):-!.

min_from_cent(Str, Min):-

list_of_words(Str, ListofWords),

list_str_min(ListofWords, Min).

Работа в прологе.

% library(win_menu) compiled into win_menu 0.00 sec, 29 clauses

% c:/documents and settings/student/application data/swi-prolog/pl.ini compiled 0.00 sec, 1 clauses

% c:/Documents and Settings/Student/Рабочий стол/lab.pl compiled 0.00 sec, 11 clauses

Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 6.2.0)

Copyright (c) 1990-2012 University of Amsterdam, VU Amsterdam

SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,

and you are welcome to redistribute it under certain conditions.

Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

1 ?- min_from_cent("Здравству мир, как дела?",X), string_to_list(Y,X).

X = [1082, 1072, 1082],

Y = "как".

Лабораторная работа №6

Каюрин Е.А. 4-Иэ-12

Жили четверо друзей. Звали их Виктор,Павлик,Карл и Альберт. Фамилии друзей такие же, как и имена, и ни у кого их них имя и фамилия не совпадают. Определите Фамилию и имя каждого мальчика, если известно, что фамилия Карла не Виктор, имя мальчика,у которого фамилия Альберт, есть Фамилией мальчика с именем Павлик.

Текст на языке Prolog

get([A|B],A,B).

get([A|B],C,[A|D]):- get(B,C,D).

reh([ [FF,'Albert'],['Pavlic',FF],[A,B],[C,D] ]):-

F=['Bictor','Karl'],

get(F,FF,F1),

get(F1,C,_),

get(F1,B,_),

A='Albert',

D='Pavlic'.

Работа программы в прологе

% library(win_menu) compiled into win_menu 0.00 sec, 29 clauses

% c:/documents and settings/student/application data/swi-prolog/pl.ini compiled 0.00 sec, 1 clauses

% c:/Documents and Settings/Student/Рабочий стол/tt.pl compiled 0.00 sec, 4 clauses

Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 6.2.0)

Copyright (c) 1990-2012 University of Amsterdam, VU Amsterdam

SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,

and you are welcome to redistribute it under certain conditions.

Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

1 ?- reh(X).

X = [['Bictor', 'Albert'], ['Pavlic', 'Bictor'], ['Albert', 'Karl'], ['Karl', 'Pavlic']] ;

X = [['Karl', 'Albert'], ['Pavlic', 'Karl'], ['Albert', 'Bictor'], ['Bictor', 'Pavlic']] ;

false.

Лабораторная работа №5 Каюрин Е. А.4-ИЭ-12

Создать текстовый файл t. Удалить из текста файла t предпоследний элемент.

Текст на прологе.

readfromfile(Name,String):-

ls, see(Name),

get_char(T),

not(T=end_of_file),!,

char_code(T,Code),

String=[Code|OtherCodes],

readfromfile(Name,OtherCodes).

readfromfile(_,[]):-seen.

str_delete(Str,Pos,Count,Result):-

I is Pos-1,

append(Head,Tile,Str),

length(Head,I),

append(Cut,TileofTile,Tile),

length(Cut,Count),

append(Head,TileofTile,Result).

Работа в прологе.

library(win_menu) compiled into win_menu 0.00 sec, 29 clauses

% c:/documents and settings/student/application data/swi-prolog/pl.ini compiled 0.00 sec, 1 clauses

% c:/Documents and Settings/Student/Рабочий стол/lab5.pl compiled 0.02 sec, 4 clauses

Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 6.2.0)

Copyright (c) 1990-2012 University of Amsterdam, VU Amsterdam

SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,

and you are welcome to redistribute it under certain conditions.

Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

readfromfile('t.txt',X), length(X,Z), string_to_list(S,X).

X = [53, 54, 115, 115, 102, 115, 100, 102, 115|...],

Z = 11,

S = "56ssfsdfsd5".

readfromfile('t.txt',X), length(X,Z), string_to_list(S,X), str_delete(X,10,1,Y),string_to_list(Q,Y).

X = [53, 54, 115, 115, 102, 115, 100, 102, 115|...],

Z = 11,

S = "56ssfsdfsd5",

Y = [53, 54, 115, 115, 102, 115, 100, 102, 115|...],

Q = "56ssfsdfs5" .

Каюрин Е.А. 4-иэ-12

Базы данных и экспертные системы.

Лабораторная работа №3

Задание1 . Найти среднеарифметическое значение чисел, находящихся в узлах дерева.

Текст программы.

count(empty,0).

count(tree(_,empty,empty),0).

count(tree(_,Left,Right),X):-

count(Left,XL),

count(Right,XR),

X is XL+XR+1.

sum1(empty,0).

sum1(tree(X,Left,Right),Y):-

sum1(Left,SL),

sum1(Right,SR),

Y is SL+SR+X.

tree_leavessum(tree(Y,empty,empty),Y):-!.

tree_leavessum(tree(_,Left,Right),Y):-

tree_leavessum(Left,YL),

tree_leavessum(Right,YR),

Y is YL +YR.

tree_avogadro(Tree, Avr):-

count(Tree, Count),

tree_leavessum(Tree,Sum),

sum1(Tree,Sum1),

Avr1=Sum1-Sum,

Avr is Avr1/Count.

main:- T=tree(2,tree(7,empty,empty),tree(3,tree(4,empty,empty),tree(1,empty,empty))),

write(T), nl,

tree_avogadro(T,Avr),

write('Avr='), write(Avr).

Работа на прологе

% library(win_menu) compiled into win_menu 0.00 sec, 29 clauses

% f:/reer.pl compiled 0.00 sec, 10 clauses

Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 6.2.0)

Copyright (c) 1990-2012 University of Amsterdam, VU Amsterdam

SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,

and you are welcome to redistribute it under certain conditions.

Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

1 ?- main.

tree(2,tree(7,empty,empty),tree(3,tree(4,empty,empty),tree(1,empty,empty)))

Avr=2.5

true

Наши рекомендации