Информационные технологии

Меню

Реклама
Похожие статьи:

Популярные записи

1

  • Функци Отбора

    1. CAR list, CDR list. Эти функции отбора селекторные функции являются примитивными функциями, и были рассмотрены раньше. Также было показано как образовать производные от них функции типа CXXXXR, где X {A, D, }при чем между буквами C и R находится хотя бы одна буква A или D.

    2. LAST list возвращает последний на верхнем уровне cons списка list. Отметим, что LAST возвращает последний cons, но не последний элемент списка. Если список есть атом, LAST возвращает NIL. Последний элемент можно получить использованием функции CAR от LAST list.

    DEFUN LAST LST

    ATOM LST NIL

    ATOM CDR LST LST

    LAST CDR LST

    $ LAST 'A B C D $ LAST 'FCO

    D NIL

    $ LAST 'A B C. D $ CAR LAST 'A B C

    C. D C

    3. NTHCDR n list. Если n - ноль или положительное целое, функция возвращает n -й CDR списка list. NTHCDR возвращает NIL, если n не есть ни 0, ни положительное целое, или если список list имеет n или меньш элементов.

    DEFUN NTHCDR N LST

    ZEROP N LST

    AND INTEGERP N PLUSP N

    ATOM LST NIL

    NTHCDR SUB1 N CDR LST

    $ NTHCDR 0 'A B C D $ NTHCDR 5 'A B C D

    A B C D NIL

    $ NTHCDR 1 'A B C D $ NTHCDR 2 'A B. C

    B C D C

    $ NTHCDR 2 'A B C D

    C D

    4. NTH n list. Если n - ноль или положительное целое, функция возвращает n -й элемент списка list, где CAR списка - нулевой элемент. NTH возвращает NIL, если n не есть ни 0, ни положительное целое, или если список имеет n или меньш элементов.

    DEFUN NTH N LST

    ATOM NTHCDR N LST NIL

    CAR NTHCDR N LST

    $ NTH 0 'A B C D $ NTH 4 'A B C D

    A NIL

    $ NTH 3 'A B C D $ NTH 2 'A B. C

    D NIL

    5. SUBLIST list n m. Если n и m - неотъемлемые цели и n=m, функция копирует и выдает из n -го по m -й элементы списка list, где CAR - элемент списка есть нулевой элемент. Если m - не целое число или больше или равное длине списка, m принимается как величина на единицу меньше длины списка. Если n - не целое число, отрицательное число или n m, SUBLIST возвращает NIL.

    DEFUN SUBLIST LST N M

    INTEGERP N

    INTEGERP M

    FIRST ADD1 - M N NTHCDR N LST

    NTHCDR N LST

    $ SUBLIST 'A B C D E F 2 4 $ SUBLIST 'A B C D E F 0 3

    C D E A B C D

    $ SUBLIST 'A B C D E F 2 2 $ SUBLIST 'A B C D E F 2

    C C D E F

    6. COUNT object list test. Возвращает количество элементов в списке list, для которых признак при сравнении с объектом object за тестом test не равняется NIL. Если тест - аргумент не задан или равняется NIL, COUNT использует EQL - тест.

    COUNT - IF test list. Возвращает количество элементов в списке list, для которых признак проверки за тестом не равняется NIL.

    DEFUN COUNT1 OBJ LST TEST

    count - aux OBJ LST TEST 0

    DEFUN count - aux OBJ LST TEST COUNTER

    ATOM LST COUNTER

    NULL TEST

    SETQ TEST 'EQL

    FUNCALL TEST OBJ CAR LST

    count - aux OBJ CDR LST TEST ADD1 COUNTER

    count - aux OBJ CDR LST TEST COUNTER

    $ COUNT 'DOG 'CAT DOG COW PIG DOG ANT

    2

    $ COUNT '5 '4 5 6 7 8

    3

    $ COUNT - IF 'ODDP '3 4 5 6 7

    3

    7. FIND object list test. Выполняет линейный поиск в списке list того элемента, для якото признак проверки с объектом object за тестом test не равняется NIL. Если тест-аргумент равняется NIL или не задан, FIND использует EQL -тест.

    FIND - IF test list. Исследует список list для поиска элемента, для которого признак проверки за тестом test не равняется NIL.

    Для обеих функций, если элемент, который удовлетворяет тесту, найден, данный элемент выдается, в ином случае возвращается NIL.

    DEFUN FIND OBJ LST TEST

    ATOM LST NIL

    NULL TEST

    SETQ TEST 'EQL

    FUNCALL TEST JBJ CAR LST

    CAR LST

    FIND OBJ CDR LST TEST

    $ FIND 'EAT 'CORN WHEAT OATS RICE 'FINDSTRING

    WHEAT

    $ FIND - IF 'LAMBDA X MINUSP CDR X 'X. 3 Y. 0 9Z. - 2/3

    Z. - 0.6666666

    8. POSITION object list test. Выполняет линейный поиск в списке list того элемента, для которого признак сравнения с объектом object за тестом test не есть NIL. Если тест-аргумент равняется NIL или не задан, POSITION использует EQL -тест.

    POSITION - IF test list. Ищет в списке list элемент, для которого признак проверки за тестом не есть NIL.

    Для обеих функций, если элемент, который удовлетворяет тесту, найден, возвращается порядковый номер данного элемента, начиная с 0. В ином случае возвращается NIL.

    DEFUN POSITION OBJ LST TEST

    position - aux OBJ LST TEST 0

    DEFUN position - aux OBJ LST TEST INDEX

    ATOM LST NIL

    NULL TEST

    SETQ TEST 'EQL

    FUNCALL TEST OBJ CAR LST INDEX

    position - aux OBJ CDR LST TEST ADD1 INDEX

    $ POSITION 'A B C 'R S T C A B A B C

    NIL

    $ POSITION 'A B C 'R S T C A B A B C 'EQUAL

    2

    $ POSITION - IF 'PLUSP '- 2.5 0 3.7 -5.3

    2

    Асоциативним списком называется список пар то есть cons -ив, которые используются в muLISP для связи ключа и объекта. Функции ASSOC и ASSOC - IF принадлежат классу функций отбора, которые дают возможность получить доступ к объекту, связанному с ключом, который удовлетворяет тесту.

    9. ASSOC key alist test. Выполняет линейный поиск в асоциативному списке пары, для которой при сравнении ее CAR, - элемента с ключом key за тестом test признак не равняется NIL. Если тест-аргумент равняется NIL или не задан, ASSOC использует EQL -тест.

    ASSOC - IF test alist. Ищет в асоциативному списке пару, для которой признак проверки ее CAR, - элемента за тестом нет NIL.

    Для обеих функций, если пара, которая удовлетворяет тесту, найдена, эта пара выдається, иначе возвращается NIL.

    DEFUN ASSOC KEY ALIST TEST

    ATOM ALIST NIL

    ATOM CAR ALIST

    ASSOC KEY CDR ALIST TEST

    NULL TEST

    SETQ TEST 'EQL

    FUNCALL TEST KEY CAAR ALIST

    CAR ALIST

    ASSOC KEY CDR ALIST TEST

    $ SETQ CAPITALS 'USA. WASHINGTON FRANCE. PARIS JAPAN. TOKYO

    $ ASSOC 'FRANCE CAPITALS

    FRANCE. PARIS

    $ ASSOC 'AUSTRALIA CAPITALS

    NIL

    10. RASSOC Key alist test. Выполняет линейный поиск в асоциативному списке пары, для которой при сравнении ее CDR, - элемента с ключом key за тестом test признак не равняется NIL. Если тест-аргумент равняется NIL или не задан, RASSOC использует EQL -тест.

    RASSOC - IF test alist. Ищет в асоциативному списке пару, для которой признак проверки ее CDR, - элемента за тестом не равняется NIL.

    Для обеих функций, если пара, которая удовлетворяет тесту, найдена, эта пара выдається, иначе возвращается NIL.

    RASSOC - это сокращение от Reverse ASSOCiate.

    DEFUN RASSOC KEY ALIST TEST

    ATOM ALIST NIL

    ATOM CAR ALIST

    RASSOC KEY CDR ALIST TEST

    NULL TEST

    SETQ TEST 'EQL

    FUNCALL TEST KEY CDAR ALIST

    CAR ALIST

    RASSOC KEY CDR ALIST YEST

    $ RASSOC 'PARIS CAPITALS

    FRANCE. PARIS

    $ RASSOC 'CANBERRA CAPITALS

    NIL