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

UptoLike

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

13
и то же число, но записываются внешне неодинаково. Для различия видов и степеней
равенства в Лиспе наряду с EQ? используются и другие предикаты.
EQV? сравнивает числа разных типов
Более общим по сравнению с EQ? является предикат EQV?, который работает
так же, как ЕО?, но дополнительно позволяет сравнивать числа разных типов (и
элементы строк).
[0] (eqv? 3 3)
#T
[1] (eqv? 3.14 3.14)
#T
[2] (eqv? 3.104 3.104)
#T
[3] (eqv? 3.00 3)
#T
[4] (eqv? 'a 'a)
#T
[5] (eqv? '(a b c) '(a b c))
()
Предикат EQV?, как правило, используется во многих встроенных функциях,
осуществляющих более сложные операции сравнения. Его использование для
сравнения списков- это часто встречающаяся ошибка.
Предикат = сравнивает числа различных типов
Сложности, возникающие при сравнении чисел, легко преодолимы с помощью
предиката =, значением которого является Т в случае равенства чисел независимо от их
типов и внешнего вида записи:
[6] (= 3.000 3)
#T
[7] (= 3.000 3.000000)
#T
[8] (= 3.010 3.000000)
()
EQUAL? проверяет идентичность записей
Обобщением EQV? является предикат EQUAL? Он работает как EQV?, но,
кроме того, проверяет одинаковость двух списков:
[0] (equal? 'x 'x)
#T
[1] (equal? '(x y z) '(x y z))
#T
[5] (equal? '(x y z) (cons 'x (cdr '(w y z))))
#T
[6] (equal? 3.12 3.12)
#T
[7] (equal? 3.00 3)
()
                                        13

и то же число, но записываются внешне неодинаково. Для различия видов и степеней
равенства в Лиспе наряду с EQ? используются и другие предикаты.

EQV? сравнивает числа разных типов
      Более общим по сравнению с EQ? является предикат EQV?, который работает
так же, как ЕО?, но дополнительно позволяет сравнивать числа разных типов (и
элементы строк).
        [0] (eqv? 3 3)
        #T
        [1] (eqv? 3.14 3.14)
        #T
        [2] (eqv? 3.104 3.104)
        #T
        [3] (eqv? 3.00 3)
        #T
        [4] (eqv? 'a 'a)
        #T
        [5] (eqv? '(a b c) '(a b c))
        ()
      Предикат EQV?, как правило, используется во многих встроенных функциях,
осуществляющих более сложные операции сравнения. Его использование для
сравнения списков- это часто встречающаяся ошибка.

Предикат = сравнивает числа различных типов
      Сложности, возникающие при сравнении чисел, легко преодолимы с помощью
предиката =, значением которого является Т в случае равенства чисел независимо от их
типов и внешнего вида записи:
        [6] (= 3.000 3)
        #T
        [7] (= 3.000 3.000000)
        #T
        [8] (= 3.010 3.000000)
        ()

EQUAL? проверяет идентичность записей
      Обобщением EQV? является предикат EQUAL? Он работает как EQV?, но,
кроме того, проверяет одинаковость двух списков:
        [0] (equal? 'x 'x)
        #T
        [1] (equal? '(x y z) '(x y z))
        #T
        [5] (equal? '(x y z) (cons 'x (cdr '(w y z))))
        #T
        [6] (equal? 3.12 3.12)
        #T
        [7] (equal? 3.00 3)
        ()