Программирование на языке Автолисп. Куляс О.С. - 35 стр.

UptoLike

Составители: 

35
(defun MEMB (a l) ; имя функции и список
аргументов
(cond ((null l) nil) ; список l пуст ?
((eq l (car l) a) l) ;элемент а найден ?
(t (MEMB a (cdr l))))) ; элемент а - в хвосте списка l?
С помощью этой функции можно проверить , принадлежит ли
некоторый элемент A данному списку L или нет.
Тело функции состоит из условного предложения , содержащего три
ветви. Они участвуют в процессе вычислений в зависимости
от
возникающей ситуации:
1. ((null l) nil) :
Аргумент - пустой список либо с самого начала , либо потому , что
просмотр списка окончен.
2. ((eq l (car l) a) l) :
Первым элементом является искомый элемент. В качестве
результата возвращается список , в котором А - первый элемент.
3. (t (MEMB a (cdr l))) :
Ни одно из предыдущих утверждений не верно: в таком случае либо
элемент содержится в хвосте списка ,
либо вовсе не входит в список.
Если список L пуст либо А в него не входит , то функция возвращает
NIL. В противном случае она возвращает в качестве своего значения ту
часть списка , в которой искомое А является его первым элементом. Это
отличное от NIL выражение соответствует логическому значению
"истина".
Пример вызова функции и
получение результатов:
(MEMB 'b '(a b c d))
После ввода этого выражения интерпретатор выдаст результат
(B C D)
В определении предиката MEMB первоначальная задача разбита на
три подзадачи. Первые две из них сводятся к просым условиям
окончания. Третья решает такую же задачу , но на шаг более короткую.
                                                                            35
          (defun MEMB (a l)              ; имя функции и список
     аргументов
             (cond ((null l) nil)        ; список l пуст ?
                    ((eq l (car l) a) l) ;элемент а найден ?
         (t (MEMB a (cdr l)))))          ; элемент а - в хвосте списка l?

    С помощью этой функции можно проверить , принадлежит ли
некоторый элемент A данному списку L или нет.
    Тело функции состоит из условного предложения , содержащего три
ветви. Они участвуют в процессе вычислений в зависимости от
возникающей ситуации:

      1. ((null l) nil) :

    Аргумент - пустой список либо с самого начала , либо потому , что
просмотр списка окончен.

      2. ((eq l (car l) a) l) :

    Первым элементом является искомый элемент.            В качестве
результата возвращается список , в котором А - первый элемент.

      3. (t (MEMB a (cdr l))) :

     Ни одно из предыдущих утверждений не верно: в таком случае либо
элемент содержится в хвосте списка , либо вовсе не входит в список.
     Если список L пуст либо А в него не входит , то функция возвращает
NIL. В противном случае она возвращает в качестве своего значения ту
часть списка , в которой искомое А является его первым элементом. Это
отличное от NIL выражение соответствует логическому значению
"истина".
     Пример вызова функции и получение результатов:

                        (MEMB 'b '(a b c d))

    После ввода этого выражения интерпретатор выдаст результат


                        (B C D)

    В определении предиката MEMB первоначальная задача разбита на
три подзадачи. Первые две из них сводятся к просым условиям
окончания. Третья решает такую же задачу , но на шаг более короткую.