在Scheme中获取一行用户输入?
我知道你可以使用(read)来获取用户输入的表达式,但是(read)只会获取第一个表达式,然后对任何内容进行求值。我想知道是否有任何方法可以读取整个用户输入行,或者将该行转换为列表在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))) 谢谢 某
(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.