2013-05-19 40 views
3

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

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

回答

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 
> 

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

+0

较少侵入性的解决方案。我已经转向了这个。谢谢。 –

2

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

(write 4) 
(newline) 
(write 2) 

> 4 
> 2 

当然,如果你想显示多个值这将是乏味的,但它是一个进步。

+1

单调乏味,是的,但是如果我在多个值之间散布'(display“\ n”)',它会产生清晰的输出。谢谢,我现在就用这个​​。 –

+1

不要使用'display'来打印数值;改用'print'。使用'(新行)'或'(显示“\ n”)'换行符。 –

+0

@RyanCulpepper我同意使用'(newline)'是一个好主意,但'print'在'#lang eopl'中不可用# –