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

Логические функции.

Имеются 3 логические функции – AND, OR, NOT.

(NOT X) – отрицание. Если X – нил, возвращается T. Иначе возвращается NIL.

(OR <арг1> <арг2> <арг3>) – выполняет выражение слева на право, и возвращает значения 1 аргумента который не является NIL. NIL возвращается тогда, когда ни одного не нила не встречено.

(AND - - - ) если встречает NIL. То возвращает NIL как окончательное, без вычисления оставшихся аргументов. В противном случае возвращает последний аргумент.

Управляющие структуры. Лекция №3.

(defun double 1

(when <условие> <lдействие 1><действие 2>….) – выполняется, если выполняется условие

(unless<условие><действие 1><действие 2>) действует, если действие НЕ выполняется

Любую логическую функцию можно заменить COND выражением, и наоборот. В качестве примера, можно привести функцию вычисления первого элемента списка с проверкой.

(defun year (l)

(cond

((listp l) (car l))

(t nil)

)

)

(defun gear1( l)

( and

(listp l)

(car l)

)

)

Вводы выводы информации

(READ)

*(Read) New

Результат: New.

*(setq x ‘(read))

Прочитанное значение будет закреплено с связанным символом S.

(defun tr (arg)

(list (+ arg (read))

(READ)

)

)

*(tr 8) 14

Cat (22 cat)

Функция PRINT – для вывода на экран.

PRINT имеет единственный аргумент

(PRINT <arg>)

Перед выводом аргумента осуществляется переход на новую строку, после вывода вводится пробел. Особенность print – так же как у READ есть побочный эффекет. Если для PRINT

*(print (+ 3 8))

11 11

Если перед скобкой поставить апостроф *(print ‘(+ 3 8))

Результат будет: (+ 3 8) (+ 3 8)

(PROG N <arg1> <arg2>…)

(defun PRINT-SUM( ) (print ‘(type to number)) (print(read)(read))

)

Операторы вычисления локальных переменных и циклических предложений.

(LET ) – связывает набор символов с их значениями.

(LET((var 1 знач 1)

(var2 знач 2)

) Форма 1 форма 2…

Обрабатываются списки одновременно

ШАГИ РАСПИСАТЬ

Пример функции для нахождения плозади пямоугольника:

(defun rectangle(dim) (lte((len(car dim)) (win (cadr dim)) ) (print (list ‘area (*len wid))) (print (list ‘per-r(*(+len wid) 2))) ) )

В результате того, что мы в интерпретаторе введем, например

*(rectangle ‘(3 5)) Получим: (area 15) (per-r 16)

(defun rectangle(dim) (let*((len(car dim)) (wid(cadr dim)) ) (print (list ‘area (*len wid))) (print (list ‘per-r(*(+len wid) 2))) ) )

PROG RETURN – условный вывод из функции. Выполняется для досрочного выхода из функции. Пример:

Написать функцию, которая вводит 2 значения, и выводит их сумму и разность. Если хотябы одно из двух значений числом не является, то ф-я выводит сообщение.

(defun s-d () (prog (x y);локальные переменные print ‘(type number)) (setq x (read)) (and(not(numberp x))(return nil)) (print ‘(type number)) (setq y (read)) (and( not (numberp y))(return nil) (print (+ x y)) (print(- x y)) ))

Варианты следующие: если вызовем в интерпретаторе, резултат будет NIL. Если оба аргумента – числа, то вызов интерпретатора приведет сперва к выводу суммы, разности, и в случае невстречаемости retrun выведет сумму, разность и NIL как результат работы программы.

Дополнительные функции печати.

PRIN1 – склеивает выводимые строчке.

Современные версии lisp позволяют работать со строками.

PRINC – печатает строчке без двойный ковычке.

Так же как PRIN1 – без перевода на новую строчке и пробеле.

TERPRI – осуществляет перевод строки. Аналог Writeln. Параметров нет, возвращемых значений нет.