gpt4 book ai didi

import - 用普通的 lisp 加载文件

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:51 25 4
gpt4 key购买 nike

我学习/使用 common lisp 已有一段时间(几个月),但我仍然难以理解如何从其他文件导入代码。我正在使用 emacs/slime 和 SBCL,根据我的阅读,我需要使用“加载”函数从另一个文件加载代码。我还定义了包并将要导入的包的名称放在“:use”子句中。然而,粘液一直提示我试图加载的文件不存在(当它明显存在时)。我究竟做错了什么?示例:

(load "file.lisp")
(defpackage :package
(:use :cl :file))
...

谢谢。

最佳答案

你不一定需要定义一个包来使用来自其他人的代码文件。简单的说, package是一种将您的代码与其他代码进行抽象和分离的方法。它是并非旨在保留有关哪个文件取决于哪个文件的信息。

组织你的文件(通常有很多文件都驻留在一个包),你需要一个叫做系统的东西,至少在 ASDF 术语中是这样。

在我们谈论 ASDF 之前,我想指出您的 load 方法可以是也用过,虽然它更适合玩具、简单的草图或在 REPL 中使用。您可以手动加载 东西——它应该可以工作。如果没有为你工作,首先尝试指定文件的完整路径。接下来你如果指定完整路径有帮助,可以做的是确保您的 CL 实现如果文件名是相对的,则知道在哪里搜索文件。但这是一个不同的主题,而且不是很有趣。

通常,ASDF用来如今组织各种项目,从小到大。你应该研究文档以了解如何使用 ASDF,但即使简单例子可以告诉你很多:

(asdf:defsystem "hello-lisp"
:description "hello-lisp: a sample Lisp system."
:version "0.0.1"
:author "Joe User <joe@example.com>"
:licence "Public Domain"
:components ((:file "packages")
(:file "macros" :depends-on ("packages"))
(:file "hello" :depends-on ("macros"))))

在这里你可以有一些关于你的项目的元数据,最重要的thing — 有关项目结构的信息。我觉得很漂亮不言自明。

如何获得ASDF?对你来说是个好消息,因为你提到你正在使用SBCL,它已经安装了。

通常,每种编程语言都有某种生态系统,即允许您定义程序的结构(文件之间的依赖关系和外部依赖项——库等)。这是一件重要的事情学习。在 Common Lisp 世界中,这样的生态系统是由以下组合形成的ASDF 和 Quicklisp — 图书馆管理员允许您自动安装项目的依赖项,例如例子。仔细计划您的旅程并查看这些工具!

关于import - 用普通的 lisp 加载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30563632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com