读取球拍方案中的字符串循环

Read Loop Over String in Racket Scheme

我正在使用 Racket Scheme。我定义了一个字符串,我正在尝试解析它。

我最初有

(define expression (open-input-string "(expression here)"))

现在我正尝试使用方案读取函数遍历所有字符。不过我是 scheme 的新手,我不太确定如何正确地循环它们。

基本上我需要循环所有

read-char expression

谢谢

您不希望像这样的内容直接 read。它是为读取 Scheme/Racket 语法而不是任意数据而构建的。相反,您可能需要 string->list,它将字符串拆分为字符列表。

(string->list "(expression here)")
; => '(#\( #\e #\x #\p #\r #\e #\s #\s #\i #\o #\n #\space #\h #\e #\r #\e #\))

也许您不想一次读取整个字符串?确实存在 read-char function, as you include in your post. There are lots of ways to loop in Racket. You can use recursion, or you can use Racket's plethora of for loop forms.

不过,如果您有一个输入端口并且只想遍历所有字符,那么,也有一种简单的方法可以做到这一点!您可以使用方便的 in-input-port-chars 序列和 for 循环,如下所示:

(define expression (open-input-string "(expression here)"))
(for ([c (in-input-port-chars expression)])
  (display c))
; => (expression here)