Шаг 95.
Дополнительные функции поиска

    На этом шаге мы рассмотрим функции muLISP85, которые можно использовать для организации поиска.

    Здесь мы остановимся на функциях-селекторах FIND, FIND-IF, POSITION и POSITION-IF в версии muLISP85.

    Сннтаксис FIND-функций:

    (FIND OBJECT LIST TEST)
    (FIND-IF TEST LIST)

    Функция FIND выполняет линейный поиск в списке LIST элемента, для которого признак проверки с обьектом OBJECT по тесту TEST не равен NIL. Если тест-аргумент есть NIL или не задан, то функция FIND использует EQL-тест.

    Функция FIND-IF исследует список LIST для поиска элемента, для которого признак проверки по тесту TEST не есть NIL.

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

    Например:

   $ (FIND 'EAT '(CORN WHEAT OATS RICE) 'FINDSTRING)
   WHEAT
   $ (FIND-IF '(LAMBDA (X) (MINUSP (CDR X))) '((X . 3) (Y .0) (Z . -2/3)))
   (Z . -0.6666666)

    Синтаксис POSITION-функций:

    (POSITION OBJECT LIST TEST)
    (POSITION-IF TEST LIST)

    Функция POSITION выполняет линейный поиск в списке LIST того элемента, для которого признак сравнения с обьектом OBJECT по тесту TEST не равен NIL. Если тест-аргумент - NIL или не задан, то функция POSITION использует EQL-тест.

    Функция POSITION-IF ищет в списке LIST элемент, для которого признак проверки по тесту не равен NIL.

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

    Например:

   $ (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

    Со следующего шага мы начнем разбирать создание простейших интерпретаторов.




Предыдущий шаг Содержание Следующий шаг