在Racket Scheme中读取循环字符串

时间:2015-02-06 05:21:55

标签: parsing scheme iteration racket

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

我最初有

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

现在我正在尝试使用方案读取功能迭代所有字符。虽然我是新手,但我不太确定如何正确循环它们。

基本上我需要循环所有

read-char expression

由于

1 个答案:

答案 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)