【问题标题】:How does one use the read function in Scheme? I know how it works syntactically, but the console doesn't let me enter values如何使用 Scheme 中的读取功能?我知道它在语法上是如何工作的,但控制台不允许我输入值
【发布时间】:2013-04-22 03:20:51
【问题描述】:

我想我对 Scheme 如何处理用户输入感到困惑。我只想从控制台读取用户在脚本运行时输入的一些值。例如,如果我想将用户的值添加到 3,我的印象是我可以使用:

(+ 3 (read))

我还可以将它包含在显示函数中以查看输出。这是我所期望的,但是当我尝试这样做时,它只等待控制台中的下一个代码。我正在尝试 biwascheme.org 和 ideone.com 作为口译员。

所以,我希望找到一种非常基本的方法来强制控制台等待用户输入,然后将其放入(读取)位置。怎么样?

【问题讨论】:

    标签: io scheme interpreter


    【解决方案1】:

    您需要使用真正支持从标准输入读取的运行时。大多数基于 Web 的运行时可能不支持这一点(尽管 Ideone 似乎允许您提前指定标准输入内容(不是交互方式),请参阅 example)。

    您应该安装Racket。每当调用read 时,DrRacket 程序实际上会给你一个很好的提示。

    【讨论】:

    • 谢谢。难怪我无法通过谷歌找到答案。我认为这将是问题所在。
    【解决方案2】:

    我发现repl.it's online programming environment for biwascheme 确实支持使用(read) 函数读取用户输入,尽管biwascheme reference 上似乎没有记录。

    例如,在 repl.it 上的 Scheme repl 中,在左侧键入:

    (define (user-says-y)
      (eq? (read) 'y))
    
    (define (take-user-input)
      (if (user-says-y)
          (print "entered y!")
          (print "did not enter y!")))
    

    保存,运行,然后从右侧的终端调用函数:

    > (take-user-input)
    

    如果您输入y,您将看到entered y! 消息,如果您输入n,您将看到did not enter y! 消息。

    魔法。

    【讨论】:

    • 已更新。 @LegendaryGoldCat 更好吗?
    • 先生,是的,先生 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2016-11-18
    • 1970-01-01
    • 2012-10-17
    相关资源
    最近更新 更多