← Архив: Common Lisp

Двусвязные списки под BSD лицензией

Author: · 26.04.2017 23:44
· original author: den73
Где есть? Нужно, чтобы было более-менее производительно, но не слишком заморочено, т.е., попросту говоря, без CLOS. 
А то я взял dlist и обнаружил, что уже не один час потрачен на допиливание совершенно необходимых вещей, например, не было ф-ии удаления элемента из списка. 
На всякий случай, мой код здесь, но вам он вряд ли пригодится - я завязался на budden-tools и кое-что русифицировал. 
· original author: LinkFly
Где есть? Нужно, чтобы было более-менее производительно, но не слишком заморочено, т.е., попросту говоря, без CLOS. 

Самому интересно, я вот dlist думал брать если понадобиться.


На всякий случай, мой код здесь, но вам он вряд ли пригодится - я завязался на budden-tools и кое-что русифицировал. 


Денис, мне иногда сложно тебя понимать. Вот ты допилил dlist, это круто и полезно. Почему бы просто не сделать это независимо?Допустим автор оценил бы твой фикс (может быть он и не будет подавать признаков жизни, но я о концепции) - но раз появилась такая крутая зависимость от budden-ttols, разумеется придется обойтись.
По-моему это не конструктивно.
Иль ты двигаешь budden-tools в качестве нового стандарта?
· original author: den73
Я двигаю Яр, а Яру нужны русифицированные библиотеки. Из budden-tools использована только perga - это я могу выпилить минуты за три, но русификацию так просто уже не выпилить, в т.ч русскоязычные комментарии. Вряд ли я возьму на себя труд дерусифицирования :) Допустим, автор проснётся. Будет ли ему разница, по какой причине он не может принять мой патч - по причине budden-tools или по причине Русского языка? 
Я вот кстати думаю, может быть набор русифицированных библиотек для CL мог бы иметь какой-то смысл для преподавания, хотя вряд ли буду этим системно заниматься. Тем временем у dlist обнаружилась одна вещь, которая мне не понравилась. Большинство ф-й, принимающих dlist, могут принимать вместо него nil. 
Я вот понимаю, когда nil - это тоже (обычный) list. Здесь есть смысл, ведь хвост обычного list - это всегда list. 
А вот в библиотеке dlist хвост двусязного списка - это никогда не двусвязный список. dlist состоит из головы (собственно dlist) с указателями на голову и хвост, и узлов (dcons). И особо обрабатывается аномальный случай, когда у списка нет ни головы, ни узлов. Мне кажется куда как более правильным изображать пустой список головой без узлов с нулевыми началом и концом. 
· original author: den73
В общем, буду переделывать, чтобы nil не воспринимался как пустой список.
· original author: den73
Выкинул полиморфизм, к-рый мне не нравился. Правда, отпала и часть полезного. Результат здесь, тесты проходят, описание надо ещё подправить. Старый свой форк, видимо, удалю в ближайшие дни, чтобы не мешался. Так что нужны кому мои добавки - берите, пока не поздно. 
· original author: vi1
>В общем, буду переделывать, чтобы nil не воспринимался как пустой список.

To archimag: Похоже сайт надо закрывать)
· original author: archimag
LOL
· original author: mvk
read - "читало", write - "писало", eval - "считало"руссифицированный лисп, бессмысленный и беспощадный
но, возможно, я преувеличиваю. 
и заменой "direction" на "Направление" все и ограничится.
не считать nil пустым списком это инновационно
с другой стороны CL имеет столько "днищ", которые еще можно пробить
с низу, все одно, не постучат
· original author: den73
Закрывать - не закрывать, а вот модерировать идиотские комментарии стоило бы, хотя понятно, что никто этим заниматься не будет. Подумайте о том, почему в стандарте CL массив длины 0 представлен не nil -ом, и напишите что-нибудь саркастическое на эту тему в адрес авторов стандарта. 
· original author: mvk
Бог с вами. Сее не сарказм. Cet diagnostic sociologique. Относитесь к сему проще.
Касательно стандарта. Массив либо есть, и, тогда он - true,  длиной от нуля до окраин галактики,и с ним возможно что-либо делать. Либо его нет, и сее  - nil, i.e. - делать нечего
Опять же, касательно длины. В JS существует:
   var aa = new Array()
   aa.length
   > 0
   aa['aa'] = "нечто"
   aa['aaa'] = "нечто"
Вы видите суслика ? 
    aa.length
    > 0
Нет!
А он есть...
    aa["aa"]
    > "нечто"
Как то так...