【问题标题】:DrRacket EOPL Scheme outputDrRacket EOPL 方案输出
【发布时间】:2013-05-14 07:58:50
【问题描述】:

我正在使用 Windows 7 中的 DrRacket 完成 EOPL 方案练习。当我从 #lang racket 切换到 #lang eopl 时,定义窗格的输出不再显示在交互窗格中。为了清楚起见,作为一个简单的例子,运行

#lang 球拍 4 产生
    4
    > 
如你所料。但是跑步 #lang eopl 4只产生
    > 
我可以做些什么来改变这种行为,或者是否有另一个窗格我应该查看输出?当然,我可以在交互窗格中评估表达式并查看输出,但是当我有多个要多次评估的表达式时,这很乏味。

【问题讨论】:

    标签: scheme racket


    【解决方案1】:

    看起来#lang eopl 使用不打印结果的#%plain-module-begin,而不是打印结果的#%module-begin

    如需快速切换,请创建以下文件,内容如下:

    eopl-printing.rkt:

    #lang racket
    (require (except-in eopl #%module-begin))
    (provide (all-from-out eopl))
    (provide #%module-begin)
    

    然后将其用作另一个文件中的语言:

    #lang s-exp "eopl-printing.rkt"
    1
    2
    3
    

    在我的 DrRacket 中产生:

    Welcome to DrRacket, version 5.3.4.6 [3m].
    Language: s-exp "eopl-printing.rkt" [custom].
    1
    2
    3
    > 
    

    警告:如果 eopl 出于某种原因隐藏了结果,那么您可能会得到一些虚假输出,但我不确定。

    【讨论】:

    • 侵入性较小的解决方案。我已经切换到这个。谢谢。
    【解决方案2】:

    一种可能的解决方法:在定义窗格中打印该值,以便它显示在交互窗格中。并使用newline 分隔行:

    (write 4)
    (newline)
    (write 2)
    
    > 4
    > 2
    

    当然,如果要显示多个值会很乏味,但这是一种改进。

    【讨论】:

    • 乏味,是的,但如果我在多个值之间穿插(display "\n"),它会产生清晰的输出。谢谢,我现在就用这个​​。
    • 不要使用display打印值;请改用print。使用(newline)(display "\n") 换行。
    • @RyanCulpepper 我同意使用(newline) 是一个更好的主意,但print#lang eopl 中不可用
    • @ÓscarLópez 啊,你是对的。那么write 将是下一个最佳选择。 display 代替 print 的问题在于它消除了有用的区别,而且它对复合数据(如字符串列表)的行为是无用的,IMO。
    • @RyanCulpepper 很公平 :) 我用你的建议更新了我的答案。
    猜你喜欢
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多