|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
koMon, в принципе список - точечная пара, в которой первый элемент атом, а второй - список. По крайней мере assoc корректно работает
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Кулик Алексей aka kpblc,
вот только не надо этого пионерского лукавства) готов налить тебе стакан, когда буду в Питере, если ты вот сейчас здесь предоставишь лисп который создаст точечную пару со вторым аргументом - списком) ----- добавлено через ~2 мин. ----- да и кстати tc запрашивал |
||||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Это любой не пустой список. Учите матчасть.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
|
||||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
С Вашего позволения начну...
В лиспе данные (оно же как и код - так как в нем это одно и то-же) связываются только 1 способом - парами - то есть устанавливается связь - ячейка 1 (в которой может находится любой тип данных, включая другую пару) связанна с ячейкой 2. Для удобства пользования создан тип данных "конец списка" который можно равнозначно обозначить nil или '() (в автолиспе он же используется как значение false в булевых операциях). То есть, например, список из 5-ти элементов 1..5 это не что иное как (cons 1 (cons 2 (cons 3 (cons 4 (cons 5 nil))))) или (cons 1 (cons 2 (cons 3 (cons 4 (cons 5 '()))))). Для удобства есть функция (list ...) которая переводит аргументы во вложенные последовательности пар; опять-же для лучшего восприятия последовательно вложенные пары с "концом" из nil отображаются как список - (a b c ...). Прочитав внимательно раза 2 - Вы поймете, что с Вашим примером все верно, в первом варианте вернулось значение, во втором список - как и должно быть, то есть любой не пустой список - это и есть пара из "головы" (car ...) и хвоста (cdr ...) - где (cdr ...) это список или '(). Все функции обработки списков (то есть вообще все функции т.к. функция с аргументами, да и без них - так-же представлена в виде списков) раскладываются в итоге на car-cdr - по иному до n-ого элемента списка не добраться.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,049
|
насколько понял в свое время: список акада представляют собой однонаправленный связанный список из так называемых cons ячеек, где car выдает ссылку на значение текущей ячейки cons, а cdr - ссылку на следующую ячейку. И тогда получается, что функция nth представляет собой по сути цикл пробегания по ссылкам списка, начиная каждый раз с первого элемента - что не совсем хорошо в плане производительности.
|
|||
|
||||
Регистрация: 20.04.2014
Сообщений: 38
|
Цитата:
----- добавлено через ~29 мин. ----- Второй элемент точечной пары может быть точечной парой, а список - это частный случай точечной пары. А вот аргументов у точечных пар нет. |
|||
|
||||
это верно! это косяк!
НО если всё же попытаться вернутся к напечатанному то об чём собственно спор? |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Это читать, а не создавать и редактировать
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 08.12.2018
Сообщений: 164
|
По-моему, не совсем так ты понял все это применительно к функции (nth <n> <список>).
Однако, я обращался к Дима_, поскольку именно он достаточно категорически заявил, что кроме, как с помощью CAR и CDR нет возможности добраться до любого элемента списка: |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
Но LISP легко расширяется и имеет множество диалектов. Вот в Autolisp ввели удобную функцию NTH. Она действительно в цикле перебирает список и работает медленней. Но это совершенно не критично по скорости, зато очень удобно. Попробуйте-ка "обезличненно" только с использованием базовых функций добраться до элемента списка с известным номером. А для прикладного программирования приходится еще больше расширять. Вот у меня, например, еще 22 функции для работы со списками. Они позволяют быстро писать простые конечные программы. |
|||
|
||||
Регистрация: 20.04.2014
Сообщений: 38
|
Есть конечно некоторое удобство и польза, если не просить ее вытаскивать слишком далекие элементы из списка, скажем, дальше 10-го элемента, особенно - в цикле.
Но как абстракция, представляющая список в виде массива, она вредна. Списки - не массивы, с ними по-другому надо работать. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
|
|||
|
||||
это дежавю что ли? да это не точечная пара будет, а тупо любой список, с количеством элементов больше одного, поскольку для него cdr возвращает оставшийся список начиная со второго элемента.
возврашаясь к ac хелпу: списки в виде точечных пар всегда состоят из двух элементов и используются автолиспом для манипулирования составными данными примитивов. в точечной паре элементы списка разделяются точкой (.).большинство функций для работы со списками не принимают в качестве аргумента точечную пару, поэтому вам нужно точно понимать, что вы передаёте функции корректный список. точечная пара является примером "неправильного" списка, у которого последния cdr не является nil. функция cons в дополнение к добавлению нового элемента в начало списка может создавать точечную пару. если второй аргумент для функции cons является любым типом, кроме списка или nil, то создаётся точечная пара. |
||||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Эта цитата не дает ничего кроме неверного представления, "списки в виде точечных пар" - трындец. Еще раз - все списочные функции? что nth, что member что assoc и другие - выражены через car и cdr - список - это всегда набор связанных указателей на данные, но не сами данные - когда мы "складываем" данные в список - с ними не происходит ничего - они остаются там-же где лежали - просто создается структура в которой они перечислены. В автолиспе вообще нет способа изменить данные (setq xxx yyy) просто создает новую ячейку xxx - возможно, таким образом "убивая" последнею возможность доступа к существующей одноименной, которая, в этом случае, будет "похоронена" ближайшим сборщиком мусора (GC).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Регистрация: 08.12.2018
Сообщений: 164
|
Цитата:
Тем не менее, чей бы сторонник не был Дима_, ответить на мой вопрос он не пожелал, зато условные адвокаты постарались. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Квадрантное представление окружности на AutoLISP | v1talka | LISP | 39 | 29.02.2012 14:25 |
Литература по AutoLisp и VBA для приложений | M_konst | LISP | 5 | 29.08.2009 17:32 |
Как отладить нейтив и менеджед код в COM объекте который используется из AutoLISP? | lexluther | LISP | 1 | 12.08.2009 08:37 |
Параметрическая библиотека в autoLISP | joisegatoi | LISP | 8 | 18.06.2007 18:39 |
Как из Delphi запустить программу на AutoLISP | Valery | LISP | 1 | 23.09.2005 20:51 |