sno*_*ape 9 lisp common-lisp package
以下示例在Paul Grahams ANSI Common Lisp中给出,作为封装的示例:
(defpackage "CTR"
(:use "COMMON-LISP")
(:export "COUNTER" "INCREMENT" "CLEAR"))
(in-package ctr)
;function definitions here
Run Code Online (Sandbox Code Playgroud)
然而,在Peter Seibels Practical Common Lisp中,链接到这里,他说:
由于读取器使用了包,因此必须先定义包,然后才能对包含切换到该包的IN-PACKAGE表达式的文件进行LOAD或COMPILE-FILE操作.在其他DEFPACKAGE表单可以引用它们之前还必须定义包...在需要时确保包存在的最好的第一步是将所有DEFPACKAGE文件与需要在这些包中读取的代码分开放置
所以他建议为每个包创建两个文件,一个用于defpackage,一个用于代码.包含defpackages的文件应该以(包内"COMMON-LISP-USER")开头.
对我来说,似乎在包内和代码之前将defpackage放在同一个文件中是确保在使用之前定义包的好方法.所以第一种方法,将所有内容收集到一个文件中似乎更容易 使用此方法创建包时是否有任何问题?
Dai*_*rod 10
我认为使用单独的文件defpackage是一个好习惯,因为:
defpackage.package.lisp.使用ASDF时无需担心订单.
(defsystem :your-system
:components ((:file "package")
... the rest ...))`
Run Code Online (Sandbox Code Playgroud)Peter Seibel这么说;)
编辑:我忘了提及quickproject哪些方便了新CL项目的创建.
REPL> (quickproject:make-project "~/src/lisp/my-wonderful-project/"
:depends-on '(drakma cl-ppcre local-time))`
Run Code Online (Sandbox Code Playgroud)
此命令将创建目录" ~/src/lisp/my-wonderful-project/"和以下文件:
package.lispmy-wonderful-project.asd (filled)my-wonderful-project.lispREADME.txt因此,我认为使用相同的惯例是好的.
| 归档时间: |
|
| 查看次数: |
1499 次 |
| 最近记录: |