gpt4 book ai didi

lisp - 通用 Lisp : Trouble with * in function type-specifier

转载 作者:行者123 更新时间:2023-12-04 22:34:19 28 4
gpt4 key购买 nike

几周以来,我意识到我在类型说明符的特定构造方面遇到了麻烦。首先,我使用的是从源代码编译的 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

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

  • 当在另一台装有 SBCL 2.1.8 的计算机上使用完全相同的表单时,此表单完全有效
  • 规范似乎并没有禁止这种构造,尽管很难说。例如,sb-kernel中有一堆代码,即types.lisp文件(全部写在SB-KERNEL包中),它专门用于捕获类型说明符中的无效 * 符号。如果不详细阅读这些功能,很难判断这是否正常。
  • 许多人比我拥有更多的经验,在他们的项目中使用这种结构。最近尝试手动编译它们时,这给我带来了很多麻烦,因为 SBCL 不允许我编译这些表格。例如,我就这个问题为 Nyxt 浏览器提出了一个问题,但我在编译游戏引擎 cl-bodge 时仍然遇到困难,该引擎已成功用于制作相当多的游戏(因此,此类错误应该是现在已经过去了)

所以,我有几个问题:

  • 一劳永逸,有问题的形式是否有效 Common Lisp?
  • 如果不是,为什么这么多人,包括一些最了解 CL 的人,都使用它(看起来没有任何问题)?
  • 如果是(我很确定是),即使在重新编译 SBCL 并通过所有测试之后,我是否仍会观察到这种行为?
  • 您知道如何解决这个问题吗?这样我就不必再手动将这种形式的所有 ftype 声明重写为 (ftype (function (t) bar) foo)我尝试编译的所有库?

提前致谢!

最佳答案

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

关于lisp - 通用 Lisp : Trouble with * in function type-specifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69711516/

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