С Новым годом! Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/32: Рейтинг темы: голосов - 32, средняя оценка - 4.72
11 / 11 / 0
Регистрация: 03.11.2020
Сообщений: 23
Common Lisp

Сторонние библиотеки в Lisp

02.05.2021, 22:18. Показов 6430. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как установить сторонние библиотеки в Lisp? Пользуюсь SBCL и CLisp на Linux, IDE Emacs и Geany.
Дело в том что я не особо хорошо могу программировать и хочу сделать прогу с гуем и хочу поковыряться в ГТК и Cairo https://github.com/rpav/cl-cairo2, в рамках практики и вообще как работать с библиотеками. И всё что я нашел это слишком туманные объяснения, которые слишком круты для меня как для новичка. Если можно, то конкретно для новичка как установить библиотеку по шагам и наверное так чтобы можно было на ответ ссылаться если у кого бы то ни было возникнет подобный вопрос.

quicklisp устанавливал по этой инструкции http://lisper.ru/articles/quicklisp
пытался разобраться в этом http://lisper.ru/wiki/cookbook:asdf но это для меня слишком круто
для GTK нужны библиотеки отсюда https://www.cliki.net/GTK пытался установить через quicklisp сообщение не найдена библиотека

Я уже в отчаянии. Lisp мне очень нравится и не очень хочется уходить с него, но я не пойму структуру языка. А изучение синтаксиса это не совсем изучение языка, так как в любом языке есть ещё как минимум компилятор-интерпретатор и структура файлов и их взаимодействие.
2
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.05.2021, 22:18
Ответы с готовыми решениями:

Какие существуют библиотеки для ИИ на lisp?
Всем хорошего времени суток! Заинтересовала тема разработки искусственного интеллекта на lisp (предпочтительнее common lisp), ...

Как загрузить тип линии, который находиться в библиотеки автокада на языке lisp?
Есть задание : Измените тип линии всех сплайнов файла находящихся в I квадранте на center. Программа работает, если указанный тип...

Сторонние библиотеки
На официальном сайте наткнулся на: Ensemble8 MandelbrotSet Modena Может кто-нибудь объяснить, что за оно и с чем едят?

9
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
02.05.2021, 23:45
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Как говорится, GUI в CL - это Emacs. Тут два аспекта. С одной стороны, с GUI традиционно было туго. Но с другой - наличие Emacs-а во многом решает проблему интерфейса. Можно сосредоточиться на том, что программа делает, а не на взаимодействии с пользователем.

В принципе, установка и загрузка библиотеки производится в одно действие:
Lisp
1
(ql:quickload <библиотека>)
Например,
Lisp
1
(ql:quickload "cl-ppcre")
После этого библиотека присутствует в образе лиспа, с которым вы работаете, как будто она всегта там была.

Свой код вы тоже однажды захотите организовать в виде библиотеки. Создать простую ASDF библиотеку несложно. Однако для начала достаточно писать код в одном файле и загружать его функцией load.

Некоторое время назад я экспериментировал с cl-cffi-gtk, не понравилось. Когда эта библиотека грузится, инициализируется что-то сишное; при разработке возникали ошибки, в результате которых работа с библиотекой рушилась, и повторно инициализировать её не получалось. Приходилось перегружать лисп. Это примерно так же нелепо, как перегружать комп. Если что, эта библиотека загружалась с помощью
Lisp
1
(ql:quickload "cl-cffi-gtk")
cl-cairo2 больно давно не обновлялась. Тем не менее, у меня нормально устанавливается с помощью
Lisp
1
(ql:quickload "cl-cairo2")
Вы напишите, что конкретно хотите сделать, и что не грузится. Я бы за компанию поковырялся.

Добавлено через 58 минут
Цитата Сообщение от greygoo Посмотреть сообщение
в любом языке есть ещё как минимум компилятор-интерпретатор и структура файлов и их взаимодействие.
В CL важнее, что есть работающий образ, который общается с окружающим миром и, в частности, с программистом/пользователем. Образ может загружать новый код из файла, но может и получать от пользователя или читать из сокета. Определения в лиспе - это обычно именование объектов символами, поэтому с точки зрения кода первостепенную важность имеют символы и "неймспейсы" - пакеты. Прочитаны ли они из файлов и если да, то из каких - не очень важно. Например, после загрузки библиотеки cl-ppcre в образе появляется пакет "CL-PPCRE", содержащий инструменты для регулярных выражений, и неважно, откуда они взялись. Связи между пакетами и файлами нет. Можно использовать несколько пакетов в одном файле, либо несколько файлов могут быть в одном пакете, либо вообще пакет может определяться в рантайме.
3
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
03.05.2021, 18:18
Кстати, насчёт создания простой библиотеки. Для этого можно воспользоваться библиотекой quickproject. Функция quickproject:make-project создаст проект с файлом для кода, файлом package.lisp, в котором описываются пакеты библиотеки, и файлом ASDF-системы. В последнем можно добавлять зависимости по мере того, как они появляются и перечислять файлы проекта по мере того, как они отпочковываются.

Но это не первостепенная необходимость. Чтобы людям не стыдно было показать. Несколько тысяч строк кода можно написать и без ASDF-системы.

В лиспе удобно переходить сразу к мясу.

Цитата Сообщение от greygoo Посмотреть сообщение
не очень хочется уходить с него
Ну, вряд ли возможно писать только на CL. Часто мы ограничены в выборе языка. Например, в машинном обучении это питон.
3
11 / 11 / 0
Регистрация: 03.11.2020
Сообщений: 23
12.07.2021, 00:23  [ТС]
Спасибо большое за ответ, и прошу прощение за долгий ответ с моей стороны, я всё еще не могу заставить работать asdf-систему.
Я пытаюсь написать программу которая без ГУЯ вряд-ли будет работать... дело в том, что я как раз занимаюсь нейросетями и я хочу видеть их работу точнее распределение весов, я не использую многослойные сети я использую вариации марковских цепей, я вижу это приложение примерно так:
в центре гуя расположить круг
зная центр и радиус круга мы можем расположить нейроны расположены по кругу
зная координаты одного и другого нейрона как отклонение на заданный угол кидаем линию цвет означает её значение от -1 до 1 или от 0 до 1 здесь и требуется cairo векторная графика особенно для линий не требует много памяти, будет быстрой и легкой
получится что то типа этого пример и куча практики в clisp и ГУЕ
Я не думаю что это приложение можно сделать в терминале или еще как и желательно хочу чтобы было в реальном времени знаю задача большая, но мне очень надо видеть как распределяются веса по мере работы сети, графики не сильно помогают

ЗЫ: тоже поработал с cl-cffi-gtk чуть что падает, думал это из-за того что нормально не работает asdf, в кукбук пытаюсь реализовать 3 вариант чтобы работало не заметно от меня
Это всё заставляет выделить три метода управления системами в ASDF:

1. Манипуляции с asdf:*central-registry* - добавление директорий в которых могут находится .asd файлы, метод неудобен тем что директории проектов могут быть вложенными, и слишком много добавлений будет требоваться
2. От недостатка предыдущего метода можно избавится определив одну директорию в asdf:*central-registry* и накапливать в нём символические ссылки на реальные .asd файлы. Недостаток - необходимость в специальных приёмах эмуляции симлмнков в Windows.
3. Наконец запись функций поиска в asdf:*system-definition-search-functions*. Этот метод почти безупречен - все .asd файлы могут легко находится, а системы компилироваться или загружаться по мере надобности. Единственный недостаток - время рекурсивного поиска, но его можно ограничить установлением максимальной глубины просмотра директорий (обычно хватает 2-3 уровней).
Миниатюры
Сторонние библиотеки в Lisp  
1
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
12.07.2021, 01:34
Цитата Сообщение от greygoo Посмотреть сообщение
сl-cffi-gtk чуть что падает, думал это из-за того что нормально не работает asdf,
Я думаю - потому что си. Если работать чисто с си, то упавшую программу легко перезапустить. А в образе лиспа повторно инициализировать сишную библиотеку может быть проблемой.

Поэтому мне идеологически нравится LTK. Графическая часть живёт сама по себе. LTK не пойдёт?

Цитата Сообщение от greygoo Посмотреть сообщение
и я хочу видеть их работу точнее распределение весов,
А в чём тут интерфейс? Может, достаточно сохранять изображения?
1
11 / 11 / 0
Регистрация: 03.11.2020
Сообщений: 23
12.07.2021, 09:23  [ТС]
В принципе я думаю можно, а по поводу сохранения изображений наверное и такой вариант сойдёт
Я пробовал LTK довольно стабильно работает покрайней мере лучше ГТК. Мне ещё понравился нуслеар, но сыроват
Я здесь учусь https://lispcookbook.github.io... k/gui.html
1
331 / 199 / 9
Регистрация: 12.05.2015
Сообщений: 334
13.07.2021, 10:09
Цитата Сообщение от greygoo Посмотреть сообщение
В принципе я думаю можно, а по поводу сохранения изображений наверное и такой вариант сойдёт
canvas в Tk умеет "живой" вектор в интерфейсе и сохранять в postscript

Добавлено через 11 минут
Цитата Сообщение от greygoo Посмотреть сообщение
ЗЫ: тоже поработал с cl-cffi-gtk чуть что падает, думал это из-за того что нормально не работает asdf, в кукбук пытаюсь реализовать 3 вариант чтобы работало не заметно от меня
Для GTK есть Iup оберткой и родной интерфейс gobject-introspection. Почти все страдания с Сишной природой они бурут на себя, но примеры с Сишных исходников переделывать в уме иожет быть накладно Соттветственно может будет смысл посмотреть лисповые бибилиотеки для них
0
217 / 212 / 8
Регистрация: 09.06.2019
Сообщений: 240
Записей в блоге: 1
16.07.2021, 12:38
подтверждаю, cl-cffi-gtk - ПАДАЕТ! падает она когда в окно поступает сообщение от мыши, с сообщением деление на ноль. в чем дело пока понять не могу. я использовал самую последнюю версию 20201220, возможно у меня просто старый gtk.

Добавлено через 8 минут
в принципе при использовании quicklisp, конфигурирования asdf не требуется. Но иногда возникает необходимость. например я пытаясь войти в суть вашей проблемы попытался загрузить систему:
(asdf:load-system :cl-cffi-gtk-demo-gdk)
на что получил ответ что такой системы нет!
поэтому добавил путь к этой системе так:
конфигурирование asdf для поиска систем, есть простой современный способ:
надо создать файл: source-registry.conf в
директории ~/.config/common-lisp
и в нем прописал:
(:source-registry
(:directory (:home
"quicklisp/dists/quicklisp/software/cl-cffi-gtk-20201220-git/demo/gdk-demo")) ;; w
:inherit-configuration)

вместо directory можно указывать tree, тогда для поиска систем будут сканироваться поддиректории.

Добавлено через 1 час 56 минут
да вот здесь написано, (https://github.com/crategus/cl... ues/85)что данная проблема только при использовании SLIME.
Я попробовал запускать примеры через обычный repl - все работает.

со slime там идет какая то несовместимость в потоках. тяжело там разбираться да и лень, если repl работает, то и ладно. можно пользоваться им напрямую. хотя конечно не так удобно как через emacs.
1
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
16.07.2021, 16:07
Вроде там написано, что проблема из-за компилирования в Slime. А если загружать в слаймовом же репле, должно, наверно, быть нормально.

Это только у меня впечатление, что проще написать GUI на другом языке и использовать IPC? В принципе, ltk или браузерный интерфейс можно рассматривать как частные случаи этого подхода.

Кстати, онтопик: а браузерный интерфейс не пойдёт?
0
217 / 212 / 8
Регистрация: 09.06.2019
Сообщений: 240
Записей в блоге: 1
16.07.2021, 21:09
Поковырялся я еще с библиотекой gtk. заметил "странную" особенность. в repl окно создается(из демонстрационных примеров) и все работает, как только пишу скрипт(люблю делать маленькие простые программки, запускающиеся с
командной строки), ни окна, ничего нет.
Проблема оказалась в том, что gtk библиотека много потоковая, и для своей работы она использует не основной поток, создает отдельный поток обработки сообщений. Поэтому мои функции нормально инициализировались, но окно создаться не успевало, т.к. основной поток завершался, а вместе с ним и вся программа.
Выход простой. в одном ответе на подобную проблему я нашел совет создать бесконечный цикл:
Lisp
1
2
;
   (loop (sleep 60))
все заработало, вот только после завершения основной нити консоль висела в этом бесконечном цикле. решение есть
в самом cl-cffi-gtk, там есть функция ожидания завершения нити работы gtk
таким образом минимальный каркас приложения gtk вот такое:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/local/bin/sbcl --script
;;загружаем quicklisp в ручную
(load "~/quicklisp/setup.lisp")
(asdf:load-system 'cl-cffi-gtk-example-gtk) ;;загружаем необходимые gtk системы
 
(in-package :gtk-example)
 
(defun example-window-simple () ;; определяем свою функцию
  (within-main-loop
    (let (;; Create a toplevel window.
          (window (gtk-window-new :toplevel)))
      ;; Signal handler for the window to handle the signal "destroy".
      (g-signal-connect window "destroy"
                        (lambda (widget)
                          (declare (ignore widget))
                          (leave-gtk-main)))
      ;; Show the window.
      (gtk-widget-show-all window))))
 
(example-window-simple) ;; запускаем функцию создающую окно и отображающее его
 
;; ожидаем завершения нити в которой выполняется основной цикл  обработки сообщений и отображения окна
(join-gtk-main)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.07.2021, 21:09
Помогаю со студенческими работами здесь

Сторонние библиотеки
Здравствуйте. У меня такой вопрос. Можно ли как нибудь подгружать сторонние библиотеки написанные скажем на Delphi? И если можно подскажите...

QT и сторонние библиотеки
Поставил QT. Потребовалась библиотека из QtSolutions (QtService). Собрал ее (lib/bin/inc). mingw32-make install прописал ее в самом QT. ...

Сторонние библиотеки Java
Всем привет! Изучил основы Java и хотел бы что-то уже поделать (например программу с gui), но задался вопросом: Как и где искать сторонние...

Сторонние библиотеки/фреймворки
Занимался тут созданием одной программки для себя, и для нее мне понадобилась некоторая библиотека. Вопрос: как добавить .zip в MS VS 2015?...

Java: Сторонние библиотеки
Где можно найти список сторонних Java библиотек?


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru