Есть ли в lisp тип данных аналог Map
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Есть ли в lisp тип данных аналог Map

Есть ли в lisp тип данных аналог Map

Ответ
Поиск в этой теме
Непрочитано 30.06.2023, 12:00 #1
Есть ли в lisp тип данных аналог Map
alexmntmnk
 
Регистрация: 30.06.2023
Сообщений: 43

У меня есть список строк, каждая строка имеет номер, или ключ
Например
Код:
[Выделить все]
1, "Line 1"
2, "Line 2"
Подскажите с помощью какого типа данных это можно реализовать?
В обычных языках это решается с помощью Map
Но тут я такого типа не нашел
Просмотров: 850
 
Непрочитано 30.06.2023, 12:09
1 | #2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Точечные пары? В списке первый элемент подсписка у тебя будет "ключом" (за уникальностью будешь сам следить, учти!), а получение - через assoc.
P.S. В C# это скорее будет словарем, КМК
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.07.2023, 08:37
#3
alexmntmnk


 
Регистрация: 30.06.2023
Сообщений: 43


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Точечные пары?
да, только в lisp это одни элемент

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
В списке первый элемент подсписка у тебя будет "ключом"
Спасибо, а не подскажите такого понятия как массив нет в Lisp? Т.е., чтобы порядковый номер элемента сделать ключем, но при этом должна быть возможность записи/чтения в любую позицию
alexmntmnk вне форума  
 
Непрочитано 03.07.2023, 09:09
1 | #4
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


лисп - это вложенные списки данных. И хотя есть методы работы через индексы (vl-position, vl-remove и т.д.) - по факту внутри это преобразуется в линейный поиск по связанному списку с первого элемента, т.е. операция сложности O(n) -> где n - количество элементов в списке. Т.е. если хотите программировать на лиспе, то отвыкайте от стандартных подходов к коду через массивы и т.п. - или скорость работы программ слегка огорчит)
Сергей812 вне форума  
 
Автор темы   Непрочитано 03.07.2023, 09:24
#5
alexmntmnk


 
Регистрация: 30.06.2023
Сообщений: 43


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
лисп - это вложенные списки данных. И хотя есть методы работы через индексы (vl-position, vl-remove и т.д.) - по факту внутри это преобразуется в линейный поиск по связанному списку с первого элемента, т.е. операция сложности O(n) -> где n - количество элементов в списке. Т.е. если хотите программировать на лиспе, то отвыкайте от стандартных подходов к коду через массивы и т.п. - или скорость работы программ слегка огорчит)
Правильно я вас понял, что если я создам список точечных пар, то это будет работать быстрее, чем обычный список с доступом по индексу?
alexmntmnk вне форума  
 
Непрочитано 03.07.2023, 09:53
#6
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от alexmntmnk Посмотреть сообщение
Правильно я вас понял, что если я создам список точечных пар, то это будет работать быстрее, чем обычный список с доступом по индексу?
явно не медленнее) В "классическом" языке доступ к элементу массива - проверка валидности индекса (опционально), высчитывание смещение указателя относительного первого элемента и собственно доступ к элементу. Здесь каждое обращение - первый элемент связанного списка и пошли по указателям, пока счетчик не скажет - что достаточно. Это плата за возможность быстрого изменения списков - в массиве надо сдвинуть часть элементов, чтобы вставить/удалить элемент не в конце массива. А в связанных списках - просто указатели перецепить в двух смежных элементах на вставляемый элемент либо наоборот, замкнуть два несмежных элемента друг на друга при удалении элемента.

тестируйте) создайте тестовый пример, заполните список значениями и проверьте производительность.
Сергей812 вне форума  
 
Непрочитано 03.07.2023, 09:55
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Цитата:
Сообщение от alexmntmnk Посмотреть сообщение
да, только в lisp это одни элемент
Кто сказал? Вторым элементов в точечной паре может быть список.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.07.2023, 10:14
#8
alexmntmnk


 
Регистрация: 30.06.2023
Сообщений: 43


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Кто сказал? Вторым элементов в точечной паре может быть список.
я имел ввиду, что точеная пара может быть только одна в этом типе
alexmntmnk вне форума  
 
Непрочитано 03.07.2023, 10:17
#9
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


кстати, в том же словаре в Net тоже не все гладко в плане производительности - так как в качестве хэша используется 4-байтный int, то не исключено возникновение коллизий: на разные значения ключей один и тот же хэш - и тогда внутри словаря образуются те же связанные списки, начало которых "привязано" к общему значению хэша. Поэтому можно только предполагать о фактическом быстродействии кода до реального тестового прогона)

----- добавлено через ~28 мин. -----
и опять же, быстродействие кода надо рассматривать в контексте применения - сколько данных будет туда загружено, какая допустимая задержка.. для того же пользовательского интерфейса общая задержка выполнения кода в 200..300мс большинство даже не заметят, имхо)
Сергей812 вне форума  
 
Непрочитано 03.07.2023, 11:01
1 | #10
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Цитата:
Сообщение от alexmntmnk Посмотреть сообщение
я имел ввиду, что точеная пара может быть только одна в этом типе
Если говорить про лисп - то это чушь! Сделай (entget (car (entsel))) и укажи любую полилинию увидишь повторяющиеся ключи.
Я тебе не зря сказал, что за уникальностью ключей будешь следить самостоятельно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Есть ли в lisp тип данных аналог Map



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Извличение данных с помощью lisp zmejsan AutoCAD 7 04.03.2016 11:50
Почему в lisp отсутствует аналог функции (arxload ...) для .NET сборок. Pastor LISP 16 17.11.2010 13:15
Аналог функции EVAL (LISP) в Exele kp+ LISP 11 01.04.2010 16:52
LISP & VBA. Передача данных. Кулик Алексей aka kpblc Готовые программы 8 29.06.2009 22:16