Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

Лабораторная работа №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