Не удается настроить qtools в SBCL с общим списком - PullRequest
0 голосов
/ 10 апреля 2020

Я новичок в lisp, и я не могу узнать, как правильно использовать defpackage для загрузки qtools (для arch linux). Для простоты, если я запускаю этот пример проекта в sbcl с загруженным quicklisp https://github.com/Shinmera/qtools/tree/master/examples/helloworld, эта ошибка появляется

While evaluating the form starting at line 8, column 0
  of #P"/home/william/code/upol/lisp/helloworld/helloworld.lisp":

debugger invoked on a PACKAGE-DOES-NOT-EXIST in thread
#<THREAD "main thread" RUNNING {1000508083}>:
  The name "CL+QT" does not designate any package.

Почему "cl + qt" не предоставляется ни одним из установленных пакетов с быстрой загрузкой ? Вот список установленных пакетов $ ls ~ / .quicklisp / dists / quicklisp / software

Спасибо за помощь

Мои ресурсы:

https://github.com/Shinmera/qtools

https://lispcookbook.github.io/cl-cookbook/getting-started.html

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Давайте посмотрим на пример. Порядок действий:

  • скомпилируйте файл .asd (например, с C-c C-k). Это создает qtools-helloworld system .
  • load «qtools-helloworld» и его зависимости с помощью Quicklisp: (ql:quickload :qtools-helloworld).
  • compile helloworld.lisp (снова с C-c C-k) и вызовите его функции.

Также посмотрите на readme Qtools: https://github.com/Shinmera/qtools#qtools -1 В нем сказано установить эти 3 библиотеки:

(ql:quickload '(qtools qtcore qtgui))

Пакет cl+qt предоставляется одной из этих систем .

update : шаги, необходимые для запуска helloworld из командной строки:

  • загрузить определение asd: rlwrap sbcl --load qtools-helloworld.asd. (rlwrap - это просто утилита readline)
  • вы попали в Lisp REPL. Теперь мы устанавливаем зависимости с помощью Quicklisp, который вы должны установить первым. Вы вводите это в Lisp REPL: (ql:quickload :qtools-helloworld). Это имя определено в asd.
  • , теперь вы можете скомпилировать файл .lisp: (load "helloworld.lisp):
* (ql:quickload :qtools-helloworld)
To load "qtools-helloworld":
  Load 1 ASDF system:
    qtools-helloworld
; Loading "qtools-helloworld"
[package qtools-helloworld]....
(:QTOOLS-HELLOWORLD)
  • это не так покажи GUI. Мы вызовем функцию main:

    • (qtools-helloworld :: main)

, и вы должны увидеть пример. Если вы внесете изменения в файл lisp, вы можете загрузить его снова. Такое использование REPL в терминале работает, но не так интерактивно, как может быть в Lisp (далеко не так). Вы хотите, чтобы ваш редактор был подключен к REPL и отправлял изменения автоматически с помощью нажатия клавиши.

Ознакомьтесь с разделом «Поваренная книга», раздел «Редакторы», поддержка Atom очень хороша для SLIMA.

ps: I найти Qtools немного сложнее, пройдя запущенные предоставленные примеры. Это не так легко обнаружить, как другие графические интерфейсы (например, Ltk или IUP). Надеюсь, вы докажете, что я не прав.

pps: также https://lispcookbook.github.io/cl-cookbook/gui.html#qt4

1 голос
/ 10 апреля 2020

Вам необходимо установить систему qtools.

  • Система - это способ организации библиотек программного обеспечения
  • Пакет - это пространство имен

Эти два теоретически не связаны. Но часто, когда вы загружаете систему X, она определяет пакет с именем X.

В некоторых случаях (например, qtools ) существует много пакетов для одной системы, например, потому что система хочет для определения различных уровней API.

Другой способ определения нескольких пакетов при загрузке одной системы основан на том факте, что ASDF версия 3.1 поддерживает расширение, скопированное из других систем сборки с именем package -inferred-systems , где каждый исходный файл неявно сопоставлен с одной системой и одним пакетом.

Ниже приведен фрагмент того, что Quicklisp показывает при установке qtools:

* (ql:quickload :qtools)
To load "qtools":
  Load 14 ASDF systems:
    array-utils asdf bordeaux-threads cffi cl-ppcre
    closer-mop dissect documentation-utils form-fiddle
    named-readtables qt+libs trivial-features
    trivial-garbage trivial-indent

... ... ...

To load "qtools":
  Load 1 ASDF system:
    qtools
; Loading "qtools"
[package uiop/package]............................
..................................................
[package cffi-sys]................................
[package cffi]....................................
..................................................
[package cffi-features]...........................
[package qt-libs].................................
[package qt]......................................
..................................................
[package deploy]..................................
[package dissect].................................
[package simple-tasks]............................
[package trivial-main-thread].....................
[package qtools]..................................
[package cl+qt]...................................
.............................
(:QTOOLS)

Quicklisp способен перехватывать и распечатывать новые пакеты, когда они определены. Здесь выше мы видим, что при загрузке quicklisp определено несколько пакетов: либо (1) пакеты, определенные зависимостями qtools , либо (2) пакеты, определенные самим qtools . Здесь и qtools, и cl+qt являются пакетами, определенными системой qtools .

Пакеты не объявляются в системах, поэтому вам нужно полагаться на документацию, чтобы узнать, какие пакеты определяет система .

...