"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 可以说是最简单的工具。键绑定虽然有点令人生畏。
我最近设置了 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 可以说是最简单的工具。键绑定虽然有点令人生畏。