Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсач.docx
Скачиваний:
6
Добавлен:
21.09.2019
Размер:
133.83 Кб
Скачать

Итоговое Задание

Задание №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

Q2

S0

S1

1

Q1

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, применить на практике теоретические познаний из курса математической логики. Так же мы ознакомились с префиксной нотацией и основными алгоритмами, используемыми в данных парадигмах программирования.

Используемая литература:

  1. Л. Стерлинг, Э. Шапиро “Искусство программирования на языке ПРОЛОГ”

  2. Семенов М.Ю. «Язык Лисп для ПЭВМ»

  3. Хендерсон П. «Функциональное программирование. Применение и реализация»

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]