我了解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/