Пробую так:
* (find-package 'asdf)
#<PACKAGE "ASDF">
* (find-package 'asdf)
#<PACKAGE "ASDF">
* (asdf:operate ’asdf:load-op :cl-cairo2)
debugger invoked on a SB-INT:SIMPLE-READER-PACKAGE-ERROR in thread #<THREAD
"initial thread" RUNNING
{AA20949}>:
SB-INT:SIMPLE-READER-PACKAGE-ERROR on #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN*
{911F759}>:
package "’ASDF" not found
Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.
(SB-IMPL::READ-TOKEN
#<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {911F759}>
#\RIGHT_SINGLE_QUOTATION_MARK)
0]
Чего ему не хватает?
P. S. SBCL 1.0.37
cl-gtk2-cairo, в отличие от предыдущего, работает.
Кто-нибудь знает, в чем разница между этими пакетами? Кроме того, что один успешно загружается, а второй - нет.
Что-то здесь не так. cl-gtk2-cairo зависит от cl-cairo2, т.е., ASDF загружает cl-cairo2 до cl-gtk2-cairo.
Кстати, а почему перед asdf:load-op стоит на ', а ’?
>Кстати, а почему перед asdf:load-op стоит на ', а ’?
* (asdf:operate ’asdf:load-op :cl-cairo2)
^^^ здесь?
По видимому, чтобы символ не вычислялся. Или я не понял вопроса?
Если убрать кавычку, будет
debugger invoked on a UNBOUND-VARIABLE in thread #<THREAD
"initial thread" RUNNING
{AA206A9}>:
The variable ASDF:LOAD-OP is unbound.
...
Я все делал по туториалу http://www.cliki.net/FirstStepsWithAsdfAndAsdfInstall .
Нет, я про то, что там стоит не обычный апостроф «'», а кавычка «’». И эта кавычка читается как часть имени пакета «’ASDF» (обратите внимание, это не ASDF, а ’ASDF). Замените эту кавычку на апостроф, и все заработает.
А можно как-то узнать строку и файл, при компиляции которых возникает ошибка? Искал grep, но ничего похожего на это не нашел.
А вы же сами это вводите. Вот где вводите, там и ищите ;)
В вашем сообщении: «* (asdf:operate ’asdf:load-op :cl-cairo2)» - вот тут вот и введена кавычка вместо апострофа.
>(asdf:operate `asdf:load-op :cl-cairo2)
Так выполняется.
Почему тогда работает для iterate (asdf:oos 'asdf:load-op :iterate) и еще с десятком пакетов?
P. S. В http://www.cliki.net/FirstStepsWithAsdfAndAsdfInstall тоже с кавычкой " ' ".
Да потому что кавычка и апостроф - вещи разные.
PS. Кстати, а какой шрифт у вас используется для отображения текста, печатаемого/набираемого в лиспе? Может быть, там эти символы видны одинаково?
>P. S. В http://www.cliki.net/FirstStepsWithAsdfAndAsdfInstall
Там тоже используется апостроф.
Апостроф и должен использоваться.
>PS. Кстати, а какой шрифт у вас используется для отображения текста,
печатаемого/набираемого в лиспе? Может быть, там эти символы видны
одинаково?
С шрифтами все ОК. Путаница возникала из-за двух команд с одинаковым назначением:
(asdf:oos 'asdf:load-op :xmls) (здесь правильно с кавычкой)
(asdf:operate `asdf:load-op :cl-cairo2) (а здесь - с апострофом)
Чем они отличаются?
Никак не привыкну к этому WYSIWYG. :(
Суть в том, что «’asdf:load-op» читается имя «’ASDF:LOAD-OP» (символ «’» является частью имени), т.к. символ с именем «LOAD-OP» внутри пакета с именем «’ASDF».
А «'asdf:load-op» читается как «(QUOTE ASDF:LOAD-OP)». Символ «'» не является частью имени, а является символом-сокращением для специальной формы QUOTE. Результат выполнения формы (QUOTE ASDF:LOAD-OP) - это символ с именем LOAD-OP внутри пакета ASDF.
Всех деталей точно не знаю, их надо смотреть в CLHS.
В моих сообщениях вид апострофа и кавычки различается, в ваших (03.04.2010 17:40) - нет.
И да, asdf:oos с кавычкой работает так же, как и с апострофом. Вопрос был: почему так.
Разница имеет место быть только для asdf:operate.
to Jax:
Внимание, почувствуйте разницу между следующими тремя (!) символами: '’`Символы ' и ` являются допустимыми в данном контексте, но символ ’ никакого специального смысла в себе не содержит и воспринимается просто как часть имени. При чём, обычно даже набрать символ ’ на клавиатуре довольно проблематично, ибо это вообще не ansii-символ!
>Внимание, почувствуйте разницу между следующими тремя (!) символами: '’`
Похоже, дело было именно в этом.
Спасибо всем за пояснения.