Мои дипломная, курсовые и контрольные работы можно скачать со страницы "Учёба"

Контрольная работа по предмету Функциональное и логическое программирование

Контрольная разбита на страницы →
Пролог: вычисление факториала, члена ряда, скорости схождения
Пролог: вычисление степени, члена ряда, скорости схождения
Пролог: удаление чётных чисел и замена строчных букв
Лисп: вычисление факториала, члена ряда, скорости схождения
Лисп: вычисление степени, члена ряда, скорости схождения

Часто у тех, кто пытался освоить этот язык, возникает впечатление, что приходится программировать задом наперёд. Вспоминается анекдот про проктолога, который удаляет гланды через анальное отверстие. Даже названия созвучны "пролог - проктолог"... → Далее → Пролог: удаление чётных чисел и замена строчных букв

Написать предикаты на языке Пролог.
а) степень (2, 3, Х)
Х = 8

predicates
  st(integer,integer,integer)
clauses
  st(F,1,F):-!.
  st(Y,N,X):-N1=N-1,
            st(Y,N1,X1), X=X1*Y.

Dialog

Goal: st(3,4,X)
X=81
1 Solution

б) вычисление n-ого члена ряда степенной ряд на прологе
ряд (2, Х)

predicates
  row(integer,real)
clauses
  row(N,X):-S=N*N, X=1/S 

Dialog

Goal: row(3,X)
X=0,11111111111
1 Solution

в) вычисление скорости схождения ряда степенной ряд на прологе Количество шагов, за которые достигается точность Формула точности на прологе
Скорость (0.01, N)
N = 21

Решение предполагает рекурсивный подход:

predicates
  skor(real,integer)
  f(integer,real,integer,real,real)
clauses
  skor(T,N):-f(N,_,1,1,T).
  f(N,F,N,F,T):-T>1/F,!.
  f(N,F,N1,_,T):-N11=N1+1,
                  F11=N11*N11,
                  f(N,F,N11,F11,T).

Но учитывая простоту заданной формулы можно схитрить:

predicates
  skor(real,integer)
clauses
  skor(To,N):-N=1/sqrt(To)+0.5.

Диалог в обоих программах будет одинаковым:

Dialog

Goal: Skor(0.028,H)
H=6
1 Solution
Goal: Skor(0.026,H)
H=7
1 Solution
Goal: Skor(0.01,H)
H=11
1 Solution

Далее → Пролог: удаление чётных чисел и замена строчных букв