我正在使用 Magic Racket 扩展在 VSCodium 中处理 .rkt 文件。
文件内容:
#lang racket
(define (square x) (* x x))
(define myNums (list 1 2 3 4 5))
(define hisNums '(2 4 6 8 10 9 7 5 3 1))
(square (car(cdr(cdr hisNums))))
(car(cdr(cdr hisNums)))
(cons(square(car(cdr(cdr hisNums)))) (car(cdr(cdr hisNums))))
(cons(square(car(cdr(cdr hisNums)))) (cdr(cdr hisNums)))
(square (car(cdr(cdr myNums))))
(car(cdr(cdr myNums)))
(cons(square(car(cdr(cdr myNums)))) (car(cdr(cdr myNums))))
(cons(square(car(cdr(cdr myNums)))) (cdr(cdr myNums)))
当我选择
Racket: Load file in REPL
命令时,VSCodium 打开球拍
racket --repl --eval '(enter! (file "filename.rkt"))'
终端的输出是,
Welcome to Racket v8.8 [cs].
string::9: read: expected a `)` to close `(`
>
并且文件没有加载到 REPL 中。
线是什么
string::9: read: expected a `)` to close `(`
想告诉我吗?
我如何解决这个问题并在没有错误消息的情况下将文件加载到 REPL 中?
我需要澄清一下,确实理解它在抱怨某处缺少闭包,但更重要的是我需要帮助将以下部分解释/翻译成英文:
string::9: read:
我不知道怎么读。
问题是
--eval
的字符串参数没有正确传递给 Racket。
我能够在安装了 Racket 7.5 的 Windows 系统上重现该问题。我使用了保存在
simple.rkt
中的这个简单程序:
#lang racket
(define (square x)
(* x x))
(square 2)
从
cmd.exe
命令提示符:
>racket --repl --eval '(enter! (file "simple.rkt"))'
产生了错误信息:
string::2: read-syntax: expected a `(` to close `)`
我不认为 Windows 命令提示符识别单引号,而是它期望包含空格的参数使用双引号。 Racket 所需的围绕文件名字符串的内部引号可以用反斜杠转义:
>racket --repl --eval "(enter! (file \"simple.rkt\"))"
这没有问题,开始 repl 并显示 4 的预期结果。
当您尝试从 VSCodium 启动 repl 时,会出现类似的问题。 Magic Racket 似乎在过去也有过类似的问题 生成的 shell 命令不太正确;我怀疑您遇到了 Magic Racket 中的错误,或者您需要配置 VSCodium 以使用正确的终端程序。如果这是一个错误,最好的办法是用 magic-racket 提出问题,看看是否有人可以解决这个问题。
Windows
cmd.exe
程序在将这些类型的字符串参数传递给程序时似乎有点混乱。
如果你打算花很多时间在 Windows 中使用终端,你可以考虑使用其中一种 Linux shell;这些可以在Windows 10中添加的WSL下运行。请注意,如果您尝试在WSL下使用Magic Racket,您可能需要解决一些问题.
您还可以安装像 MYSYS2 这样的东西,它使用 MinGW 来提供类似 Linux 的 shell。我在上面测试过的旧 Windows 盒子上安装了这些工具;您最初发布的
racket
调用在 Windows 的 MYSYS shell 中运行良好。