我正在使用Racket Scheme。我定义了一个字符串,我正在尝试解析它。
我最初有
(define expression (open-input-string "(expression here)"))
现在我正在尝试使用方案读取功能迭代所有字符。虽然我是新手,但我不太确定如何正确循环它们。
基本上我需要循环所有
read-char expression
由于
答案 0 :(得分:3)
你不希望普通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
功能。在Racket中有很多循环方式。您可以使用递归,也可以使用Racket的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)