Когда я загружаю пакет «итерации» с помощью Quicklisp ( (ql:quickload "iterate")
), кажется, что он загружается нормально, но ни одна из функций не работает. Когда я ввожу (iterate:iter (for i from 0 to 10) (collect i))
, я получаю сообщение об ошибке «Переменная I не привязана» и несколько предупреждений о стиле, говорящих о том, что COLLECT и FOR — это неопределенные функции, а FROM — неопределенная переменная. То же самое произойдет, если я попытаюсь использовать ITER или ITERATE вместо ITERATE:ITER. Я использую СБКЛ.
Использование iterate после установки с помощью Quicklisp
Ответы (3)
«Операторы» предложений также находятся в пакете iterate
:
(iterate:iter (iterate:for i from 1 to 10) (iterate:collect i))
Iterate — это пакет, который часто удобен для use-package
(или :use
в определении пакета).
person
Svante
schedule
20.05.2013
Спасибо. Я поставил
:use
в начале своего файла, но он не компилируется и выдает предупреждение о том, что пакет также экспортирует следующие символы: (preprocess-clause define-clause config2 ...) и огромный список символов . В начале моего файла у меня есть (defpackage :foo (:use :cl :iterate)) (in-package :foo)
. Вся документация, которую я читал об этом, кажется, указывает на то, что это должно работать, но по какой-то причине это не так.
- person lightlike; 21.05.2013
Это не рабочее решение, но мне очень любопытно найти его самому, так что, возможно, мне тоже кто-то поможет :)
(defun old-package () (package-name *package*))
(defmacro i++ (&body body)
(let ((old (package-name *package*))
(new (package-name (find-package 'iterate))))
(in-package #.(package-name (find-package 'iterate)))
(prog1
`(unwind-protect
(progn
(in-package ,new)
(iter ,@body))
(in-package ,old))
(in-package #.(old-package)))))
Теперь это не сработает, потому что символы тела определяются в старом (например, cl-user
) пакете, а затем, когда вы пытаетесь использовать их в пакете iterate
, все ломается. Но должен быть какой-то способ... кроме потенциальной замены всех символов в пакете iterate
...
person
Community
schedule
21.05.2013
определение его как части пакета с помощью :use вероятно является лучшим способом с точки зрения стиля, но я просто использовал
(use-package "ITERATE")
и это, казалось, работало очень хорошо.
person
Joel M Ward
schedule
10.07.2019