在Scheme中获取一行用户输入?

在Scheme中获取一行用户输入?,scheme,Scheme,我知道你可以使用(read)来获取用户输入的表达式,但是(read)只会获取第一个表达式,然后对任何内容进行求值。我想知道是否有任何方法可以读取整个用户输入行,或者将该行转换为列表 (let ((input (read-user-line))) ;; user could type "cons 2 3" without quotes ;; input could contain '(cons 2 3) (apply (car input) (cdr input))) 谢谢 某

我知道你可以使用(read)来获取用户输入的表达式,但是(read)只会获取第一个表达式,然后对任何内容进行求值。我想知道是否有任何方法可以读取整个用户输入行,或者将该行转换为列表

(let ((input (read-user-line)))
   ;; user could type "cons 2 3" without quotes
   ;; input could contain '(cons 2 3)
   (apply (car input) (cdr input)))

谢谢

某些方案有一个
读取行
函数,该函数读取一行并将其作为字符串返回


(但要从这一点出发,实现一些可以应用的东西,情况就不同了。)

如果您的方案是R6RS实现,您可以使用get-LINE。如果相同的方案也实现了SRFI-13,那么可以使用STRING-TOKENIZE将其转换为列表

一个合格的方案是Ypsilon:

(import (srfi srfi-13)) (let ((input (get-line (current-input-port)))) (for-each (lambda (x) (display x) (newline)) (string-tokenize input))) (进口(srfi srfi-13)) (let((输入(获取行(当前输入端口))) (每个(λ(x)(显示x)(换行)) (字符串标记化输入))) $ypsilon try.scm 敏捷的棕色狐狸跳过了懒狗。 这个 快的 棕色的 狐狸 跳跃 结束 这个 懒惰的 狗。
否则,无论实现提供什么样的非标准扩展,您都可以自己使用。

您可以使用readline将其作为字符串读取

然后用空格将其拆分为字符串列表

然后,对那些使用字符串输入的对象使用read

然后使用apply

你不能只应用字符串,你只能应用方案数据,字符串是方案数据,是的,但不是过程

$ ypsilon try.scm the quick brown fox jumps over the lazy dog. the quick brown fox jumps over the lazy dog.