Micro Lisp. Основные понятия, структуры и функции. Яшин Л.З. - 12 стр.

UptoLike

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

12
EQ? проверяет тождественность двух символов
Предикат EQ? сравнивает два символа и возвращает значение Т, если они
идентичны, в противном случае — NIL:
[0] (eq? 'x 'кот)
()
[1] (eq? 'x 'x)
#T
[2] (eq? '235 '235)
#T
[3] (eq? 235 235)
#T
[4] (eq? 235.5 235.5)
()
[5] (eq? 'кот (car '(кот пес)))
#T
[6] (eq? () nil)
#T
[7] (eq? t 't)
()
[8] (eq? 't 't)
#T
[9] (eq? t t)
#T
[10] (eq? t (atom? 'мышь))
#T
Предикат EQ? накладывает на свои аргументы строго определенные
требования. С его помощью можно сравнивать только символы или константы Т и
NIL, и результатом будет значение Т лишь в том случае, когда аргументы совпадают.
Для проверки чисел в Лисп-Микро EQ? не используется. Предикатов АТОМ? и EQ?,
несмотря на простоту EQ?, вполне достаточно для работы со списками.
Предикат EQ? в Лисп - системах обычно таков, что его можно применять к
списочным и числовым аргументам, не получая сообщения об ошибке; он не
проверяет логического равенства чисел, строк или других объектов, а лишь смотрят,
представлены ли лисповские объекты в памяти вычислительной машины физически
одной и той же структурой. Одноименные символы представлены в одном и том же
месте памяти (не считая нескольких исключений), так что той же проверкой
предикатом EQ? символы можно сравнить логически. До сих пор, например, списки
могли быть логически (внешне) одинаковы, но они могут состоять из физически
различных списочных ячеек.
[7] (eq? '(а b с) '(а b с))
()
[8] (eq? 15.0 15)
()
Так как EQ? определен лишь для символов, то, сравнивая два выражения,
прежде всего надо определить, являются ли они атомами (АТОМ?). Если хотя бы
один из аргументов является списком, то предикат EQ? нельзя использовать для
логического сравнения. При сравнении чисел проблемы возникают с числами
различных типов. Например, числа 3.000000, 3 и О,ЗЕ1 логически представляют одно
                                        12

EQ? проверяет тождественность двух символов
    Предикат EQ? сравнивает два символа и возвращает значение Т, если они
идентичны, в противном случае — NIL:
       [0] (eq? 'x 'кот)
       ()
       [1] (eq? 'x 'x)
       #T
       [2] (eq? '235 '235)
       #T
       [3] (eq? 235 235)
       #T
       [4] (eq? 235.5 235.5)
       ()
       [5] (eq? 'кот (car '(кот пес)))
       #T
       [6] (eq? () nil)
       #T
       [7] (eq? t 't)
       ()
       [8] (eq? 't 't)
       #T
       [9] (eq? t t)
       #T
       [10] (eq? t (atom? 'мышь))
       #T
       Предикат EQ? накладывает на свои аргументы строго определенные
требования. С его помощью можно сравнивать только символы или константы Т и
NIL, и результатом будет значение Т лишь в том случае, когда аргументы совпадают.
Для проверки чисел в Лисп-Микро EQ? не используется. Предикатов АТОМ? и EQ?,
несмотря на простоту EQ?, вполне достаточно для работы со списками.
      Предикат EQ? в Лисп - системах обычно таков, что его можно применять к
списочным и числовым аргументам, не получая сообщения об ошибке; он не
проверяет логического равенства чисел, строк или других объектов, а лишь смотрят,
представлены ли лисповские объекты в памяти вычислительной машины физически
одной и той же структурой. Одноименные символы представлены в одном и том же
месте памяти (не считая нескольких исключений), так что той же проверкой
предикатом EQ? символы можно сравнить логически. До сих пор, например, списки
могли быть логически (внешне) одинаковы, но они могут состоять из физически
различных списочных ячеек.
        [7] (eq? '(а b с) '(а b с))
        ()
        [8] (eq? 15.0 15)
        ()
      Так как EQ? определен лишь для символов, то, сравнивая два выражения,
прежде всего надо определить, являются ли они атомами (АТОМ?). Если хотя бы
один из аргументов является списком, то предикат EQ? нельзя использовать для
логического сравнения. При сравнении чисел проблемы возникают с числами
различных типов. Например, числа 3.000000, 3 и О,ЗЕ1 логически представляют одно