我了解Scheme使用端口执行输入和输出。在尝试学习如何获取控制台输入和输出时,我遇到了MIT-Scheme的console-i/o-port变量。

但是,狡猾的解释者说这是一个未绑定变量。我想知道如何在Guile Scheme脚本中使用端口从控制台(Unix中的终端)获取输入和输出。我仍然是Scheme和Linux的新手,很清楚地一步一步地受到了赞赏。

另外,(display <object>)如何工作?它是固有地使用端口还是有另一种方式。

附言如果还有另一种不使用端口的方法,请让我知道如何使用它。

最佳答案

如果您想读取和写入SExps,则您有(读取),(写入),(显示)等信息,如果您只想读取字符,请使用(read-char)和(write-char)-它们都使用输入/输出端口。您选择的默认情况下,它们是stdin和stdout。一切都非常简单(https://www.gnu.org/software/guile/manual/html_node/Input-and-Output.html#Input-and-Output)。

您可能也对guile-ncurses(https://www.gnu.org/software/guile-ncurses/)感兴趣。

在其他一些好东西中,可以从ice-9中检查漂亮的打印模块(在很长的六倍子上速度很慢,但是输出的格式确实很好,非常适合例如代码生成):

  (use-modules (ice-9 pretty-print))
  (pretty-print `(super cool stuff (+ 2 3) => ,(+ 2 3)))


并且,如果您需要自己的解析器,请签出lalr模块(系统基础lalr)。

编辑一个小的示例,该示例读取数字,自身相乘并打印出结果:

#!/usr/bin/guile -s
!#

(let ((x (read)))
  (display (* x x))
  (newline))


(记住chmod + x这个脚本)。

编辑更改了表达式,使其按照Chris的建议使用形式,实际上,括号越少越好

关于console - 如何使用控制台作为Guile Scheme的输入和输出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38394651/

10-12 07:33
查看更多