рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Рекурсия

Рекурсия - раздел Программирование, Логическое программирование Вычисление Факториала: .f(0)=1 F(N+1)=(N+1)*f(N) .predikrte...

Вычисление факториала:

.f(0)=1 f(n+1)=(n+1)*f(n)

.predikrtes fak(integer, real)

.clauses

fak(0,1):-!. /* 0!=1 */

fak(N, Fak):-

N>0, /*только для целых положит*/

N1=N-1,

.fak(N1,Fak1), /*опред.(n-1)! */

Fak=N*fak1. /*f(n)=n*f(n-1) */

Goal

.fak(2,X), write(X). /* 2! */

goal

X
(1) fak(2,X)

Fak
N
(2) fak(N,Fak)

(3) fak(2,Fak)

(4) N>0

N1=1
(5) N1=N-1

Fak1
(6) fak(N1,Fak1)

 
 


Fak
N
(7)fak(N,Fak)

N=1
(8) fak(1,Fak)

(9) N>0

N1=0
(10) N1=N-1

Fak1
(11) fak(N1,Fak1)

 
 


(12) fak(0,1)

 
 


Fak=1
Fak=1
(13) Fak=N*Fak1

           
 
   
 
   
Fak=1
 

 


Fak=2
(14) Fak=N*Fak1

 
 


X=2

(15).write(X)

 

2.7 Обработка списков

Список – это упорядоченная элементов, причем элементами могут быть любые термы, включая другие списки.

Пустой список- [ ]

Непустые списки имеют-голову и хвост. Они являются компонентами функтора, обозначаемого точкой ”.”.Например список из одного элемента а представляется так:

.(а,[])

где а-голова и []-хвост. Список элементов a,b, и c имеет вид:

.(а,.(b,.(c,[]))).

То есть, за элементом a следует b, который в свою очередь является головой списка .(b,.(c,[])).

Драгим видом записи списка будет:

._._._[].

На ТП такой список представляется так:

[a,b,c]

где a-голова, b,c-хвост списка, который и сам является списком.

Например, информация о некоторых семьях может выглядеть как предикат со следующей структурой:

.семья(фамилия, имя_отца, имя_матери, [имена детей] ).

Семья(Иванов,Иван,Людмила,[Антон,Наташа,Юрий] ).

В этом случае количество детей не имеет значение, а количество аргументов предиката семья всегда одинаково. Поэтому, если записать целевое утверждение:

семья(X,Y,Z,Дети).

То переменные конкретизируются так:

X=”Иванов” Y=”Иван” Z=”Людмила”

Дети=[“Антон”,”Наташа”,”Юрий”]

На ТП есть специальная форма представления списка

[X|Y].

Если такой спосок сопоставляется с другим списком, то X конкретизируется головой, а Y- хвостом того списка, например:

.семья(X,Y,Z,[Det1|Deti]),

то переменные конкретизируются так:

X=”Иванов” Y=”Иван” Z=”Людмила”

Det1=”Антон” Deti=[”Наташа”,”Юрий”].

 

Например, наити семью, где имеется ребенок с именем Алекс.

/* set femili */

trace

domains

detlist= person*

person= string

predicates

member(person,detlist)

semja(person,person,person,detlist)

clauses

member(X,[X|_]).

member(X,[_|Y]):-member(X,Y).

semja("Ivanov","Ivan","Ljda",["Anton","Nata","Jri"]).

semja("Sevs","Piter","Vera",[]).

semja("Pospelov","Serg","Ira",["Aleks","Tanj"]).

goal

makewindow(1,121,0,"",12,40,13,40),

semja(F,I1,I2,Det),member("Aleks",Det),

write("Aleks ",F),nl,

write("ОТЕЦ=",I1," МАТЬ=",I2).

 

 

При этом предикат member проверяет принадлежность элемента к списку:

Первый дизъюнкт предиката member означает, что искомый элемент находится в голове списка. Если это не так, то выбирается второй дизъюнкт, который отделяет хвост от головы списка и проверяет, находится ли искомый элемент в хвосту. Это происходит рекурсивно до тех пор, пока либо не найдено, что у остатка списка голова является искомым элементом (удача), либо не окажется, что после отделения хваста от головы остался пустой список([]), который уже не расщепляется на голову и хвост (неудача).

– Конец работы –

Эта тема принадлежит разделу:

Логическое программирование

Логическое программирование... После многолетних теоретических работ по математической логике в году в... Для программиста особенность языка Пролог состоит в том что он на основе выражений логики предикатов может заниматься...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Рекурсия

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Логика высказываний
Формально-логические высказывания представляются с помощью букв, с которыми производятся логические операции. Например, предложение: Машина находится у дома. Является выс

Логика предикатов
С помощью логики предикатов можно выразить связи между различными вещами. Формально высказывания в логике предикатов имеют вид: P(t1,t2,…tn), Где t1, t2, …, tn – аргументы,

Живущей в монастыре.
Строгая аббатиса дает Марии точные указания, какие правила необходимо соблюдать в монастыре, в частности, что туда нельзя пропускать мужчин. Но однажды аббатиса обнаружила в монастыре мужчину и ста

Дизъюнкты
База данных составляется с помощью предикатов, каждый из которых описывается множеством дизъюнктов: Функтор(аргумент1, аргумент2, …):-условие1,условие2,… . Где функтор- имя предик

Константы и переменные
Константы должны начинаться с маленькой буквы, либо стоять в одинарных или бинарных кавычках, либо они являются числами: -mother -price -list‘f’ 169 1.4e-3  

Секции программы
Секция domains-(объявление областей определения). 1 Способ. имя области = d где d- любой тип. Например person=string nomer=integer

Обработка программ Турбо Прологом
Обработка программ ведется по принципу “поиска вглубь”.Это означает, что ТП всегда пытается доказать утверждение в дизъюнктах слева направо с помощью фактов и правил из базы данных. Целево

Возврат и отсечение
ТП в случае, если есть больше одного дизъюнкта для одного предиката, отмечает этот дизъюнкт точкой решения, чтобы он мог вернутся в эту точку и продолжить работу со следующим дизъюнктом, даже есла

Работа с файлами
/* telefon book + file */ trace domains name,adr= string datad=c(name,adr) file=d predicates person(name,adr) getdata(file)

Изменения в базе данных
  asserta(факт) (dbasedom): (i)   Добавляет новый факт перед остальными фактами того жe предиката в оперативную базу данных. Факт должен быть

Арифметика
  Арифметические утверждения присваивания имеют следующий общий вид:   результат = операнд1 оператор операнд2   В качестве опера

Работа с данными типа string
  concat( строка1, строка2, строкаЗ) (string,string,string):(i,i,i)(i,i,o)(i,o,i)(o,i,i)   В зависимости от конкретизации выполняется лексикографическа

Преобразование типов
  Все предикаты преобразования типов действуют в обе стороны ((i,о) и (o,i)), а случай (i,i) проверяет истинность (не для предиката real). Преобразование между типам

Команды операционной системы
  Для выполнения команд system и dir необходимо, чтобы Турбо-Прологу была доступна дискета с COMMAND. СОМ.   system(команда) (string):(i)

Версии Турбо-Пролога
  Данные методические указания описывают версию 1.0. Уже доступная версия Турбо-Пролог 1.1 имеет следующие дополнительные возможности: - предикат makewindow

Внешняя среда системы Турбо-Пролог
  Турбо-Пролог после запуска предпологает определенную конфигурацию своих и пользовательских файлов. Различаются пять каталогов: 1. Турбо-каталог. Здесь дол

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги