Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
1

= vs equalp =)

07.03.2014, 00:07. Показов 799. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Развлечение)
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
; SLIME 2013-09-30
(defun == (x y) (= x y))
 
(defun sxhash= (x) (sxhash x))
 
(sb-ext:define-hash-table-test == sxhash=)
 
(defparameter *hash-equalp*
            (make-hash-table :size 10000000
                             :test #'equalp))
 
(defparameter *hash-=*
            (make-hash-table :size 10000000
                             :test #'==))
 
(for key 0 10000000 () 
            (setf (gethash 
                   (coerce key 'single-float)
                   *hash-equalp*)
                  key))
 
(for key 0 10000000 () 
            (setf (gethash 
                   (coerce key 'single-float)
                   *hash-=*)
                  key))
Lisp
1
2
3
4
5
*hash-=*
#<HASH-TABLE :TEST == :COUNT 10000001 {1002B58083}>
 
*hash-equalp*
#<HASH-TABLE :TEST EQUALP :COUNT 10000001 {1002B50083}>
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
(time (loop repeat 10000000
                   with r = ()
                   for x = 0 then (random 10000000)
                   for i = (gethash x *hash-=*)
                   do (push i r)
                   finally (return (length r))))
Evaluation took:
  3.480 seconds of real time
  3.310000 seconds of total run time (3.210000 user, 0.100000 system)
  95.11% CPU
  8,332,096,220 processor cycles
  160,038,896 bytes consed
  
10000000
(time (loop repeat 10000000
                   with r = ()
                   for x = 0 then (random 10000000)
                   for i = (gethash x *hash-equalp*)
                   do (push i r)
                   finally (return (length r))))
Evaluation took:
  5.995 seconds of real time
  5.980000 seconds of total run time (5.980000 user, 0.000000 system)
  99.75% CPU
  14,349,740,555 processor cycles
  160,040,128 bytes consed
  
10000000
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2014, 00:07
Ответы с готовыми решениями:

equal и equalp
Во многих учебниках по ЛИСПу пишут, что функция equal думает, что списки одинаковы, если они...

Error: unbound function - EQUALP
Доброго всем вечера. Столкнулась с проблемой, что XLISP-PLUS 3.04 на запрос (equalp 3.0 3) и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,654
Записей в блоге: 13
07.03.2014, 10:33 2
В НомеLisp "=" применяется только к числам. Для прочих - eq, equal, ...
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
07.03.2014, 10:50  [ТС] 3
Цитата Сообщение от Catstail Посмотреть сообщение
В НомеLisp "=" применяется только к числам. Для прочих - eq, equal, ..
не понял..
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,654
Записей в блоге: 13
07.03.2014, 11:49 4
Ну, просто мысли по поводу заголовка темы...
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
07.03.2014, 11:52  [ТС] 5
Catstail, я имел ввиду при использовании хэш-таблиц. ANSI не позволяет использовать в качестве :test что либо кроме equalp, eql ..
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,654
Записей в блоге: 13
07.03.2014, 11:54 6
Как я понял из тестов, "=" несколько быстрее. Что и неудивительно, поскольку equalp сравнивает объекты разнообразных типов.

Добавлено через 49 секунд
Цитата Сообщение от transformator.t Посмотреть сообщение
ANSI не позволяет использовать в качестве :test что либо кроме equalp, eql ..
- а... Понял.
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
07.03.2014, 11:59  [ТС] 7
Lisp
1
2
3
4
5
6
7
8
9
10
11
(type-of 1)
BIT
 
(type-of 1.0)
SINGLE-FLOAT
 
(type-of 2)
(INTEGER 0 4611686018427387903)
 
(type-of 1.0d0)
DOUBLE-FLOAT
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
09.03.2014, 21:48 8
equalp — наиболее обобщенная функция сравнения, не удивительно, что она медленней специализированной.
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,654
Записей в блоге: 13
09.03.2014, 21:52 9
Я это и имел в виду.
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
09.03.2014, 22:31 10
Ну да, устал с дороги, капитанствую. =)

transformator.t, сравни equal, eql и eq.
0
defun
603 / 617 / 44
Регистрация: 30.04.2011
Сообщений: 702
10.03.2014, 06:41  [ТС] 11
korvin_, сравни
0
10.03.2014, 06:41
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru