首页 > 解决方案 > Common Lisp:函数类型说明符中 * 的问题

问题描述

几周后,我意识到我在使用与类型说明符有关的特定构造时遇到了麻烦。首先,我使用的是从源代码编译的 SBCL 2.1.9,它“显然通过了所有测试”。

这是问题所在:当我尝试使用此表单为函数指定类型时

(declaim (ftype (function (*) int) foo))

这是 SBCL 告诉我的

debugger invoked on a SIMPLE-ERROR in thread
#<THREAD "main thread" RUNNING {1001870303}>:
  * is not permitted as an argument to the FUNCTION type specifier

如果不是出于以下几个原因,这很可能是完全正常的:

所以,我有几个问题:

提前致谢 !

标签: lispcommon-lispsbcl

解决方案


(function (*) ...)从来没有合法的 CL:见 hyperspec。SBCL 可能已经接受了它,尽管我不知道它的含义(可能与(function (&rest t) ...)?)相同。如果“一些最了解 CL 的人”一直在使用,那么,我不会推测他们对 CL 的了解,但我强烈建议他们要么修复他们的声明,要么根据接受它们的实现对它们进行条件化.


推荐阅读