如何在PolyML解释器中添加readline支持?

8
我发现polyml是ML的实现,可以在Ubuntu上很容易地安装(在存储库中命名为polyml并且可以使用poly执行)。我正在遵循Andrew Cumming的A Gentle Introduction to ML。在与polyml解释器进行几分钟的实验后,我发现它不支持readline (按箭头上按键会产生^[[A)

对于一个解释器来说,这似乎不正常。只有在未安装readline的情况下才会出现这种情况,但我的Python解释器并没有表现出这样的情况。


sml/nj 应该也可以在 Ubuntu 中作为“smlnj”软件包提供,就像 mlton 一样(虽然它仅是一个完整的程序编译器)。 - Jesper.Reenberg
3个回答

11

如果要为不支持readline功能的终端程序添加此功能,最简单的方法是使用rlwrap调用该程序。您可以通过多个软件包管理器安装同名的软件包。在下面的示例中按

$ poly
Poly/ML 5.7.1 Release
- ^[[A
你可以这样运行它:

$ rlwrap poly
Poly/ML 5.7.1 Release
- stuff I typed from last session;

或者您可以在~/.bashrc或类似位置添加别名:

alias poly='rlwrap poly'

3

1
如果您对Standard ML和Poly/ML感兴趣,也应该看一下Isabelle/ML。Isabelle主要是定向于定理证明环境,但也可以用作ML系统——如果您不介意下载300 MB并占用600-800 MB的磁盘空间来获取完整的IDE。
通过将它们嵌入到Isabelle理论源代码中,可以即时编译和评估ML片段,如下所示:
theory Scratch
imports Main
begin

ML {*
  fun f x = x + 1
*}

end

在Isabelle/jEdit中,这会提供有关推断类型等的工具提示——比仅使用readline更加详细,但对于学习SML非常有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接