LINUX.ORG.RU

common lisp & package


0

0

Объявляю свой пакет:

(defpackage :math-func
  (:use :cl :nlisp))
Делаю C-x C-e. Т.е. хочу, что бы nlisp автоматом подрубился.
Выдаётся ошибка:

The name "NLISP" does not designate any package.
Как правильно сделать ?

anonymous

Ответ на: комментарий от mv

> (require 'nlisp)

Это понятно. А почему нельзя через defpackage :use ? Ведь в пакете nlisp есть :export. Или потому, что пакет nlisp объявлен в *.asdf файле ?

anonymous
()
Ответ на: комментарий от anonymous

> А почему нельзя через defpackage :use ?

Потому что defpackage не занимается загрузкой пакетов, он только определяет сам пакет, т.е. его имя, что он экспортирует и что он и из каких пакетов импортирует.

Для того чтобы defpackage знал что он импортирует при помощи :use соответствующие пакеты уже должны быть загружены через require или (asdf:oos 'asdf:load-op ...).

kpanic ★★
()
Ответ на: комментарий от kpanic

Вот создаю пакет и в нём использую другие:

(defpackage :my-pack
  (:use common-lisp)
  (:export #:example1 #:lala))

(in-package :my-pack)
(require 'other-pack)

При компиляции этого файла (compile-file "my-file.lisp") ошибка:
... for "file .../my-file.lisp"  package "other-pack" not found

Что не так ?

anonymous
()
Ответ на: комментарий от anonymous

А где стоит курсор при нажатии на C-x C-e? Так как он вычисляет последнее выражение, то курсор должен стоять после закрывающей скобки, чтобы последнее выражение было (require 'other-pack). А, например, если он стоит на 'other-pack, то это будет эквивалентом (eval 'other-pack).

Попробуй C-c C-c, когда курсор стоит в любом месте этого выражения.

Или просто в REPL набери (require 'other-pack). Сразу станет понятно, что выполняется и как.

kpanic ★★
()
Ответ на: комментарий от anonymous

Блин... Никак не получается:
Создаю свой пакет в файле my-pack.lisp:
(defpackage :my-pack
  (:use common-lisp)
  (:export #:example1 #:lala))
(in-package :my-pack)
Ф-ции, которого используют ф-ции из другого пакета other-pack.
(require 'other-pack)
Далее компилю.

Потом хочу использовать ф-ции из my-pack. В другом файле :
(load "my-pack")
И вот при использовании ф-ций example1,lala (из my-pack), пишет, что 
ф-ций из пакета other-pack (которые входят в эти ф-ции) нет.
Как это победить ? 
 

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.