Базовые функции Функциональное программирование Григорьева И.В.

Презентация:



Advertisements
Похожие презентации
ДРУГИЕ ФОРМЫ РЕКУРСИИ I Функциональноепрограммирование Григорьева И.В.
Advertisements

ИМЯ И ЗНАЧЕНИЕ СИМВОЛА Функциональное программирование Григорьева И.В.
ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ СПИСКОВ. Лисповская память состоит из списочных ячеек Лисповская память состоит из списочных ячеек Значение представляется указателем.
Функциональное программирование МарГТУ2009 г. 1 Функции. Базовые функции. Лекция 2.
Основы программирования в Лиспе. Функции. Рекурсия Лекция 11.
Другие формы рекурсии II Функциональное программирование Григорьева И.В.
Определение функций Функциональное программирование Григорьева И.В.
ФУНКЦИИ БОЛЕЕ ВЫСОКОГО ПОРЯДКА Функциональное программирование Григорьева И.В.
Функционалы. Методы обработки S-выражений. Методы обработки списков Лекция 12.
ВЫЧИСЛЕНИЕ В ЛИСПЕ Функциональное программирование Григорьева И.В.
ОТОБРАЖАЮЩИЕ ФУНКЦИОНАЛЫ. Важный класс функционалов в практическом программировании на языке Лисп образуют отображающие функции или МАР-функции. МАР-функционалы.
1 Кубенский А.А. Функциональное программирование. Глава 3. Стили функционального программирования. Глава 3. Стили функционального программирования 3.1.
Логика и управление Функции Eugeny L Yakimovitch 2008
Основы рекурсии Рекурсивно-логическое программирование Григорьева И.В.
1 Кубенский А.А. Функциональное программирование. Глава 4. Основы лямбда-исчисления Рекурсия в лямбда-исчислении fac = λn.(if (= n 0) 1 (* n (fac.
ПЕРЕДАЧА ПАРАМЕТРОВ И ОБЛАСТЬ ИХ ДЕЙСТВИЯ Функциональное программирование Григорьева И.В.
Программирование при помощи отображений Функциональные отношения и базовые функции Lisp Функции Eugeny L Yakimovitch 2008
1 Кубенский А.А. Функциональное программирование. Глава 4. Основы лямбда-исчисления Рекурсия в лямбда-исчислении fac = λn.(if (= n 0) 1 (* n (fac.
Использование математических функций Microsoft Excel Встроенные функции.
Логические функции в Excel Калинина Цогоев. ЕСЛИ Синтаксис: ЕСЛИ(лог_выражение,значение_если_истина,значе ние_если_ложь) Результат: Возвращает одно значение,
Транксрипт:

Базовые функции Функциональное программирование Григорьева И.В.

2 EQ проверяет тождественность двух символов Предикат EQ сравнивает два символа и возвращает значение Т, если они идентичны, в противном случае -NIL. (eq i кот) -> ? (eq кот (car (кот пес)) -> ? (eq () nil) -> ? (eq t t) -> ? (eq t (atom мышь)) -> ?

3 С его помощью можно сравнивать только символы или константы Т и NIL, и результатом будет значение Т лишь в том случае, когда аргументы совпадают. Так как EQ определен лишь для символов, то, сравнивая два выражения, прежде всего надо определить, являются ли они атомами (АТОМ). Если хотя бы один из аргументов является списком, то предикат EQ нельзя использовать для логического сравнения. (eq (a b c) (a b c)) -> ? (eq ) -> ?

4 EQL и = сравнивает числа EQL позволяет сравнивать однотипные числа (и элементы строк). (eql 3 3) -> ? (eql ) -> ? (eql 3 3.0) -> ? Предикат = сравнивает числа различных типов. (= 3 3.0) -> ? (= e1) -> ?

5 Обеспечить применение предиката к числовым аргумен­там может предикат NUMBERP, который истинен для чисел: (numberp Зе-34) -> ? (numberp Зе-34) -> ? (numberp t) -> ? (numberp t) -> ?

6 EQUAL проверяет идентичность записей (equal x x) -> T (equal (x y z) (x y z)) -> T (equal (a b c) (cons a (b c)) -> T (equal (nil) ((nil))) -> ?

7 EQUALP проверяет наиболее общее логическое равенство Наиболее общим предикатом является EQUALP, с помощью которого можно сравнивать произвольные лисповские объекты, будь то числа различных типов, выражения или другие объекты. Этот предикат может потребоваться, когда нет уверенности в типе сравнива­емых объектов или в корректности использования других предикатов сравнения. Недостатком универсальных предикатов и функций типа EQUALP является то, что их применение требует от системы несколько большего объема вычислений, чем использование специализированных предикатов и функций.

8 Другие примитивы NULL проверяет на пустой список (null ()) -> T (null (cddr (a b c)) -> ? Работает как логическое отрицание (null nil)-> T (null T) -> NIL (null x) (eq nil x)

9 Вложенные вызовы CAR и CDR можно записы­вать в сокращенном виде Комбинируя селекторы CAR и CDR, можно выделить произвольный элемент списка. Например: (cdr (cdr (саr ((а b с) (d e) (f))))) -> (С) Комбинации вызовов CAR и CDR образуют уходящие в глубину списка обращения, и в Лиспе используется для этого более короткая запись: желаемую комбинацию вызовов CAR и CDR можно записать в виде одного вызова функции: (C...R список)

10 Вместо многоточия записывается нужная комбинация из букв А (для функции CAR) и D (для функции CDR): (cadr x) (car (cdr x)) (cddar x) (cdr (cdr (car x))) Для функций CAR, CADR, CADDR, CADDDR и т.д. в Коммон Лиспе используются и более наглядные имена FIRST, SECOND, THIRD, FOURTH и т.д. Можно воспользоваться и наиболее общей функцией NTH, выделяющей n-й элемент списка: (NTH n список) (LAST x)

11 LIST создает список из элементов Другой часто используемой встроенной функцией является ( list х2 хЗ...) которая возвращает в качестве своего значения список из значений аргументов. Количество аргументов функции LIST произвольно: (list 1 2) -> (1 2) (list a b (+ 1 2)) -> (A B 3)

12 Какие из следующих вызовов возвращают значение Т? (atom '(cdr nil)) (atom '(cdr nil)) (equal '(a b) (cons '(a) '(b))) (equal '(a b) (cons '(a) '(b))) (atom (* 2 (+ 2 3))) (atom (* 2 (+ 2 3))) (null (null t)) (null (null t)) (eq nil (null nil)) (eq nil (null nil)) (eql 2.0 2) (eql 2.0 2) (equal 2.0 2) h) (= 2.0 2) (equal 2.0 2) h) (= 2.0 2) i) (equalp 2.0 2) i) (equalp 2.0 2) j) (equalp (atom nil) (caar 4(0))) j) (equalp (atom nil) (caar 4(0)))