Tenho tentado me familiarizar com o sistema de pacotes em common-lisp e (mais ou menos) entendo a ideia. No entanto, como muitos (pesquisei muitas outras questões semelhantes), parece haver alguma barreira de implementação que não consigo superar.
Então: estou tentando definir um pacote feito de dois arquivos lisp. Estou usando o portacle e todos os arquivos estão no mesmo diretório, tanto a definição do sistema quanto o código que escrevi (/portacle/projects/):
O arquivo ASDF é mostrado abaixo e é chamado apenas de census-api.asd; há arquivos de pacotes chamados packages.lisp no mesmo diretório.
No entanto, quando tento (ql:quickload "census-api"), recebo "Sistema não encontrado".
É justo, se eu verificar a variável de diretórios locais quicklisp, parece que deve funcionar:
ql:*local-project-directories*
(#P"c:/Users/Brian/portacle/projects/"
#P"c:/Users/Brian/portacle/all/quicklisp/local-projects/")
Da mesma forma, mudo o caminho atual para o diretório de projetos –
(setf *default-pathname-defaults* #P"c:/Users/Brian/portacle/projects/")
#P"c:/Users/Brian/portacle/projects/"
Mas nada disso altera o 'sistema não encontrado' quando tento carregar via quicklisp. Sinto que estou perdendo algum tipo de etapa de definição de pré-carregamento.
Qual o proximo?
Posso voltar a carregar apenas os arquivos individuais (eles atualmente usam um '''(in-package #:census-api)''' que apresenta erros, mas eu poderia comentar essa linha e carregar diretamente), mas eu' Prefiro ser capaz de definir sistemas.
Editar: Ok, compilei diretamente 'packages.lisp' (definição abaixo); quickload agora é capaz de fazer `(ql:quickload "census-api")', e as funções relevantes estão disponíveis quando chamadas através do pacote de usuário lisp comum, por exemplo, (census-api:set-fips etc). Mas ainda não consigo usar (no pacote "census-api") e, se precisar pré-carregar todos esses arquivos, sinto que devo estar fazendo algo errado.
Edição 2: Ok, (in-package :census-api) agora funciona , porque :census-api e "census-api" significam coisas diferentes, o que eu sei mesmo que nem sempre entenda quando um funciona versus o outro ). Isso resolve meu problema de uso atual, mas não o mais amplo - como uso o quickload (ou qualquer outro utilitário do sistema) para evitar ter que carregar pacotes manualmente? Ou esse é apenas o preço de fazer negócios?
censo-api.asd
(defsystem "census-api"
:description "A collection of utilities to pull Census, BLS, and Google DistanceMatrix API data.
For default use, evaluate the following --
Census: (set-fips), (set-hh-input), (print-hh-output (output-list))
BLS: (set-fips), (print-bls-data (prepare-hashed-bls-data))
Distancematric: (set-location-params), (print-dm-output (get-data (*api-response*)))"
:author "Brian LastName <[email protected]>"
:license "To be determined"
:version "0.5"
:depends-on ("dexador" "shasht")
:serial t
:components ((:file "census-api")
(:file "distancematrix-api")))
pacotes.lisp:
;;; Packages for Census Work
(defpackage #:distancematrix-api
(:use #:cl)
(:export #:set-location-params
#:call-dm-api
#:parse-response
#:get-data
#:print-dm-output))
(defpackage #:census-api
(:use #:cl)
(:export #:set-fips
#:set-hh-output
#:print-hh-output
#:output-list
#:prepare-hashed-bls-data
#:print-bls-data))