Racket REPL:当我将 .rkt 文件加载到 Racket REPL 时,语句“string::<value>: read:...”指的是什么,我该如何修复它?

问题描述 投票:0回答:1

我正在使用 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: 

我不知道怎么读。

terminal racket read-eval-print-loop vscodium
1个回答
0
投票

问题是

--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 中的终端程序

Windows

cmd.exe
程序在将这些类型的字符串参数传递给程序时似乎有点混乱

如果你打算花很多时间在 Windows 中使用终端,你可以考虑使用其中一种 Linux shell;这些可以在Windows 10中添加的WSL下运行。请注意,如果您尝试在WSL下使用Magic Racket,您可能需要解决一些问题.

您还可以安装像 MYSYS2 这样的东西,它使用 MinGW 来提供类似 Linux 的 shell。我在上面测试过的旧 Windows 盒子上安装了这些工具;您最初发布的

racket
调用在 Windows 的 MYSYS shell 中运行良好。

© www.soinside.com 2019 - 2024. All rights reserved.