Common lisp 为什么会出现带有词法变量的警告

Common lisp 为什么会出现带有词法变量的警告,common-lisp,lexical-scope,Common Lisp,Lexical Scope,我正在使用此函数的库: (defun init-plot (&optional (title "Plot Window") (x-size 250) (y-size 250)) (defsketch window ((width x-size)(height y-size)(title title))) (make-instance 'window )) 基本上是一个三个可选参数函数,它使类成为一个草图,创建一个实例。该功能正常工作,但有

我正在使用此函数的库:

(defun init-plot (&optional (title "Plot Window")
                    (x-size 250) (y-size 250))
  (defsketch window ((width x-size)(height y-size)(title title)))
  (make-instance 'window ))
基本上是一个三个可选参数函数,它使类成为一个草图,创建一个实例。该功能正常工作,但有以下警告:

);在INIT-PLOT中:未使用的词汇变量标题

在这种情况下,title选项不起作用,但是这些变量在不同的作用域上,因此我不明白为什么必须更改第一个变量的名称。因为不改变它是行不通的

defscket是一个包装defsclass的宏

(defmacro defsketch (sketch-name bindings &body body)
                       ...

所以我不明白这里发生了什么,我不熟悉素描,但大概
defscretch
应该在顶层,而传递给
MAKE-INSTANCE
的参数则相反。这似乎不是如何计划的,或者在Git上的草图教程中也不是这样,也许宏扩展
defstact
可以帮助您了解
title
是如何使用的?查看教程,我觉得所有的示例都将
defstact
作为顶级形式。另外,似乎将窗口大小和标题指定给
MAKE-INSTANCE
与示例一起使用:
(MAKE-INSTANCE'草图示例:hello-world:title“foo”:宽度800:height 300)
按照惯例,前面有DEF的任何东西都是顶级表单。DEFSKETCH实现本身似乎也违反了这一点。