Common lisp 选择asdf defsystem中:文件组件的扩展名

Common lisp 选择asdf defsystem中:文件组件的扩展名,common-lisp,reader-macro,Common Lisp,Reader Macro,我90%肯定答案是正确的,但我似乎无法找到答案。 我想知道我是否能够将不以“.lisp”结尾的源文件作为文件组件。例如,通常我有类似的 (asdf:defsystem #:hash-bang-lang :serial t :depends-on (#:named-readtables) :components ((:file "package") (:file "hash-bang-lang"))) 如您所见:文件组件未指定扩展名。我想知道是否可以加载

我90%肯定答案是正确的,但我似乎无法找到答案。 我想知道我是否能够将不以“.lisp”结尾的源文件作为文件组件。例如,通常我有类似的

(asdf:defsystem #:hash-bang-lang
  :serial t
  :depends-on (#:named-readtables)
  :components ((:file "package")
               (:file "hash-bang-lang")))
如您所见:文件组件未指定扩展名。我想知道是否可以加载不以“.lisp”结尾的lisp文件

我想这样做的原因有点奇怪,但对问题没有影响,所以请跳过下一部分

我有一些文件“test.mylang”,它从以下内容开始

(in-package :hash-bang-lang)
(in-readtable hash-bang)
#!mylang
..rest of file..
#!mylang
是一个reader宏,它为my#mylang函数提供解析文件其余部分的控制。因此,如果我有python解析器,我会使用#!python和my#'python函数将进行解析。 在这种情况下,我希望使用
.mylang
.py
扩展名,这样编辑器就可以立即知道如何突出显示代码,即使它将以lisp格式加载


谢谢大家,
:file
组件类型强制文件扩展名为
.lisp
。如果需要其他扩展,则需要新的组件类型

(defpackage #:mylang-system
  (:use #:cl #:asdf))
(in-package #:mylang-system)

(defclass mylang-file (cl-source-file)
  ((type :initform "mylang")))

(defsystem test-ext
  :encoding :utf-8
  :components ((:file "package")
               (:mylang-file "hash-bang-lang")))

我认为通过使用
#p“foo.py”
,它可能会工作(如
(:file#p“foo.py”)
。在尝试加载系统hash-bang-lang的定义时,恐怕不会出现
错误。对于泛型函数..FIND-COMPONENT..使用(##p“test.py”)调用时没有适用的方法
谢谢,这将给我一个调查asdf扩展机制的借口,它已经在我的待办事项列表上一段时间了