"illegal terminating character after a colon: #\" 在 portacle 中,尽管代码中没有冒号

"illegal terminating character after a colon: #\" in portacle, though no colons in code

我最近设置了 Portacle 1.3 以在 Win 7 上学习 common lisp。但是,每当我 运行 我的代码出现错误时,即使没有代码。 运行 个别行工作正常,但是。该错误仅在我 运行 整个文件时显示。

我尝试将一些代码放入 EVAL 函数中,但我认为它一次只接受一个参数,所以我无法 运行 将整个程序放入其中。

我在 this Whosebug 页面中发现了类似的错误,但他们的代码包含冒号,这就是他们的错误所在。

我认为这可能是我的 运行 代码中的一个错误,即使我没有代码编译也看到了错误,但是我什么都不知道。

完整错误:

main.lisp:1:1:
  read-error: 
    READ error during COMPILE-FILE:

      illegal terminating character after a colon: #\

        Line: 1, Column: 13, File-Position: 12

        Stream: #<SB-INT:FORM-TRACKING-STREAM for "file [path to file]\main.lisp" {1005F5F0D3}>

Compilation failed.

Portacle 是一个独立的 Emacs,打包了 Common Lisp 开发所需的一切,它使用 SBCL 作为 Common Lisp 实现。

我相信当你说 'compile the whole file' 时你所做的是调用 slime-compile-and-load-file,它默认绑定到键序列 C-c C-k。这里有很多移动组件:

  • Emacs是这里的文本编辑器。它还负责启动 Common Lisp 开发所需的所有组件。
  • Slime 就是这样一个组件。它充当 Emacs 和您的 Common Lisp 实现(在本例中为 SBCL,但理论上支持任何 Lisp)之间的接口。基本上它将您在 Emacs 中编写的代码发送到您的 Lisp 进行评估。
  • SBCL 是 Common Lisp 实现。在这种情况下,它是一个编译器。这就是评估它接收到的代码并通过 Slime 向 Emacs 中的用户界面输出答案的原因。它也是 'lives',在某种意义上,您可以通过修改加载的 Lisp 图像的状态与它交互,跟踪定义的函数、全局动态变量等等。这就是为什么您可以拥有 REPL,以及为什么您需要 Slime 与之交互。

因此,为了调试您的问题,我会尝试:

  • 从 Windows shell 和 运行 一个简单的 .lisp 文件启动 SBCL 以检查一切是否正常。例如,您可以将 (format t "~a" (lisp-implementation-type)) 放入 .lisp 文件中,并通过调用 (load "...\file.lisp") 从 shell 中将其 运行 放入 SBCL 中。它应该 return "SBCL".
  • 使用 Emacs 创建一个全新的文件(而不是奇怪的 Windows 可能会弄乱文件的程序)(C-x C-f),并尝试从那里调用编译 (C-c C-k).

我相信您 IDE 的选择是正确的。如果您是 Common Lisp 的初学者并且不知道 Emacs 配置,那么 Portacle 可以说是最简单的工具。键绑定虽然有点令人生畏。