【问题标题】:Racket interaction in DrRacket and on terminalDrRacket 和终端中的 Racket 交互
【发布时间】:2016-02-05 12:34:50
【问题描述】:

这个程序在 DrRacket 中运行良好:

(define (display-state input data)
  input)

(define (update-state input data) 
  data  )

(define (main input data)  
    (displayln (display-state input data))
    (main (read-line (current-input-port) 'any) (update-state input data)))

(main "" data)

它是一个程序的骨架,它不断地从终端交互中读取数据并对用户的输入和数据状态进行处理。

但是,在终端上,使用

raco exe prog.rkt

它在第一次输入后终止。有谁知道为什么?它是 read-line 还是 current-input-port 的错误/功能?

【问题讨论】:

  • 当我运行 racket prog.rkt 或使用 raco exe prog.rkt ./prog 时,该程序运行良好。
  • 虽然我注意到它会打印出#<eof> 并且即使我按下 ctrl-D 也会继续要求更多输入。您可能应该处理这种情况,因为 read-line 返回字符串或 eof。
  • 对我来说,它在我第一次回车后终止。
  • 并将其打印的输出视为终端的输入
  • 例如。如果我输入“blah”,它会完成,然后在我的系统上查找一个名为“blah”的命令

标签: racket raco


【解决方案1】:

好的。我明白我做错了什么。 (愚蠢,但我会留下这个,以防其他人有同样的问题)

我希望 raco exe 能够运行该程序。但实际上它只是将它编译成可执行文件。

所以我只是在输入我认为是输入的内容,而实际上我是在输入窗口等待编译终止。

其实我需要用

编译
raco exe prog.rkt

然后用

运行
./prog

哇!

【讨论】:

  • 通常我使用 racket 运行 Racket 程序。如果您raco make(直接或通过raco setup),则会生成compiled/* 字节码文件。这是最慢的部分。此后racket“无事可做”并且速度非常快。从字节码到本机代码的 JIT 非常快,并且无论如何都在运行时发生。换句话说,raco exe 是关于部署,使可执行文件在其他计算机上运行。这不是人们在本地运行的正常方式。
  • 实际上,@GregHendershott 我正在研究 Racket 正是因为我想要一个 Lisp 来编写不需要安装完整环境的小型独立命令行工具。
猜你喜欢
  • 2018-05-03
  • 1970-01-01
  • 2014-06-17
  • 2015-04-21
  • 1970-01-01
  • 2018-05-07
  • 2014-11-07
  • 1970-01-01
  • 2012-01-03
相关资源
最近更新 更多