Итоговое Задание
Задание №1
Разработать рекурсивную функцию, заменяющую в любом месте префиксного алгебраического выражения (* f 1) на f.
(defun change(x)
(cond ((or (null x)(atom x)) x)
((and (equal (car x) '*)(equal (caddr x) '1))(change (cadr x)))
(T (mapcar 'change x))
)
)
Результат:
CHANGE
(change '(*(*(*(*(*(*(exp x)1)1)1)1)1)1))
(EXP X)
Задание №2
Разработать рекурсивную функцию, осуществляющую сложение числа с натуральным числом только с помощью функции прибавления единицы add1.
(defun sum (a b) (cond
((= b 1) (1+ a))
(t (1+ (sum a (1- b))
)
)
)
)
Результат:
SUM
(sum 14 6)
20
Триггер
1
S0
S1
1
S2
1
Q0
Описание предикатов
nand(integer,integer,integer,integer,integer) – логический элемент ИЛИ-НЕ, имеющий 4 входа и 1 выход.
trigger(integer,integer,integer,integer,integer,integer) – предикат, описывающий триггер, имеющий 3 входа и 3 выхода
Текст программы
predicates
nand(integer,integer,integer,integer,integer)
trigger(integer,integer,integer,integer,integer,integer)
clauses
nand(1,1,1,1,0).
nand(1,1,1,0,0).
nand(1,1,0,1,0).
nand(1,0,1,1,0).
nand(0,1,1,1,0).
nand(1,0,0,0,0).
nand(0,1,0,0,0).
nand(0,0,1,0,0).
nand(0,0,0,1,0).
nand(0,0,0,0,1).
nand(0,0,1,1,0).
nand(1,0,0,1,0).
nand(1,1,0,0,0).
nand(1,0,1,0,0).
nand(0,1,0,1,0).
nand(0,1,1,0,0).
trigger(S0,S1,S2,Q0,Q1,Q2):-
nand(Q0,S1,S0,Q1,Q2),
nand(Q2,S0,S2,Q0,Q1),
nand(Q1,S2,S1,Q2,Q0).
Результат:
Нессиметричный триггер с эмиттерной связью
Описание предикатов
transistor(symbol,symbol,symbol) – транзистор (эмиттер, коллектор, база)
resistor(symbol,symbol) – резистор (вход, выход)
element(symbol,symbol) – элемент (вход, выход)
trigger(symbol,symbol,symbol) – триггер (вход, выход, выход)
Текст программы
predicates
transistor(symbol,symbol,symbol)
resistor(symbol,symbol)
element(symbol,symbol)
trigger(symbol,symbol,symbol)
clauses
resistor(n1,n2).
resistor(n1,out1).
resistor(n4,out2).
resistor(out2,n6).
resistor(n7,n8).
resistor(n2,n4).
transistor(out1,n6,n4).
transistor(n2,n6,n7).
element(n8,out2).
trigger(I1,O1,O2):-
resistor(I1,X1),
resistor(I1,O1),
resistor(X1,X2),
resistor(X2,O2),
resistor(O2,X3),
transistor(O1,X3,X2),
transistor(X1,X3,X4),
resistor(X4,X5),
element(X5,O2).
Результат:
Вывод
Выполнение данной курсовой позволило нам ознакомиться с языками функционального и логического программирования на примере Prolog’a и LISP’a, применить на практике теоретические познаний из курса математической логики. Так же мы ознакомились с префиксной нотацией и основными алгоритмами, используемыми в данных парадигмах программирования.
Используемая литература:
Л. Стерлинг, Э. Шапиро “Искусство программирования на языке ПРОЛОГ”
Семенов М.Ю. «Язык Лисп для ПЭВМ»
Хендерсон П. «Функциональное программирование. Применение и реализация»
