Bel*_*ish 2 iteration scheme parsing racket
我正在使用球拍方案。我定义了一个字符串,我正在尝试解析它。
我最初有
(define expression (open-input-string "(expression here)"))
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用方案读取函数迭代所有字符。不过,我是计划新手,不太确定如何正确循环它们。
本质上我需要循环所有
read-char expression
Run Code Online (Sandbox Code Playgroud)
谢谢
read对于这样的事情你不想要简单的。它是为了读取Scheme/Racket 语法而不是任意数据而构建的。相反,您可能需要string->list,它将字符串拆分为字符列表。
(string->list "(expression here)")
; => '(#\( #\e #\x #\p #\r #\e #\s #\s #\i #\o #\n #\space #\h #\e #\r #\e #\))
Run Code Online (Sandbox Code Playgroud)
也许您不想立即读取整个字符串?read-char正如您在帖子中所包含的那样,确实存在一个功能。Racket 中有很多循环的方法。您可以使用递归,也可以使用 Racket 的大量for循环形式。
不过,如果您有一个输入端口并且只想循环所有字符,那么也有一种简单的方法可以做到这一点!您可以使用in-input-port-chars带有for循环的方便序列,如下所示:
(define expression (open-input-string "(expression here)"))
(for ([c (in-input-port-chars expression)])
(display c))
; => (expression here)
Run Code Online (Sandbox Code Playgroud)