我需要在机器学习中写一些代码,这是我第一次使用该语言。 是否有适用于标准ML的开发环境(最好是在Windows下)?我尝试过谷歌搜索(和StackOverFlow!),但是我只找到了用于Linux的普通编译器(最多带有交互式控制台),没有IDE或Eclipse/NetBeans插件。 有什么建议吗?
我需要在机器学习中写一些代码,这是我第一次使用该语言。 是否有适用于标准ML的开发环境(最好是在Windows下)?我尝试过谷歌搜索(和StackOverFlow!),但是我只找到了用于Linux的普通编译器(最多带有交互式控制台),没有IDE或Eclipse/NetBeans插件。 有什么建议吗?
对于那些喜欢用Sublime Text而不是Emacs作为编程SML的编辑器首选的人,下面的指南描述了如何配置Sublime Text以适用于SML。
要使此指南适用于您,您必须已经安装了smlnj。
首先,下载Sublime Text 2。确保下载版本2,因为SML语法支持尚未与版本3兼容。
Sublime Text支持一组惊人的软件包(即插件),可以分别安装。其中之一叫做Package Control。您必须首先安装Package Control才能直接从编辑器安装其他包。提供的链接说明了安装此程序包所需执行的操作。
现在,由于您已经安装了Package Control,因此安装其他软件包将非常容易。我们现在必须安装两个软件包:SML以支持编程语言的语法突出显示功能,并且SublimeREPL是一个增加了许多不同编程语言的REPL功能的软件包,可用于Sublime Text。
要安装这些软件包,您必须转到菜单并查找“工具”->“命令面板”,然后键入“Install Package”。在搜索框中,写下要安装的软件包名称,从找到的列表中选择程序包,然后按Enter键将其安装。对于上述两个软件包,请执行此操作:“SML”和“ SublimeREPL”
一旦您安装了SML程序包,如果您打开SML文件,则应该会在编辑器中获得语法突出显示功能。它甚至提供了一个名为Son of Obsidian的Sublime Text主题,您可以在首选项->颜色方案-> SML->Son of Obsidian中启用它。但是,您无需启用主题即可使用SML,这只是一种偏好。
一旦您安装了SublimeREPL程序包,您将能够转到菜单“工具”->“SublimeREPL”->“SML”,并打开支持使用SML程序包的语法突出显示,以及命令历史记录、行编辑和自动完成的SML REPL会话。如果您在左侧选项卡中有SML代码文件,在右侧选项卡中有SML REPL会话,则可以使生活变得非常简单。您可以通过使用“View”->“Layout”选项来完成此操作。
现在,让我们添加一些键盘快捷键以适用于REPL。SublimeREPL程序包提供了少量的键盘配置,提供的可能不适用于SML REPL。因此,这是我通常要做的事情。
在Sublime Text中编辑文件Default.sublime-commands
。该文件包含Tools -> SublimeREPL菜单中当前的SML菜单选项。因此,我们现在将更改它以创建第二个选项,该选项可以在新的SML REPL会话中运行现有文件。我的编辑后文件如下所示。请注意“id”字段。我们可以定义任意数量的不同命令,并给它们不同的ID。在下一步中,我们将定义每个命令的功能。
[
{
"caption": "SublimeREPL: SML",
"command": "run_existing_window_command", "args":
{
"id": "repl_sml",
"file": "config/SML/Main.sublime-menu"
}
},
{
"caption": "SublimeREPL: SML - Run File",
"command": "run_existing_window_command", "args":
{
"id": "repl_sml_run",
"file": "config/SML/Main.sublime-menu"
}
}
]
现在,在与前面的文件相同的目录中,编辑Main.sublime-menu
文件。该文件包含上述每个定义命令的详细信息。我的编辑文件定义了上述两个命令,一个是简单地打开REPL,另一个是将当前文件打开到REPL中。它看起来如下所示:[
{
"id": "tools",
"children":
[{
"caption": "SublimeREPL",
"mnemonic": "r",
"id": "SublimeREPL",
"children":
[{
"caption": "SML",
"id": "SML",
"children": [
{"command": "repl_open",
"caption": "SML",
"id": "repl_sml",
"args": {
"type": "subprocess",
"encoding": "utf8",
"cmd": ["sml"],
"cwd": "$file_path",
"external_id": "sml",
"syntax": "Packages/SML (Standard ML)/sml.tmLanguage"
}
},
{"command": "repl_open",
"caption": "SML - Run Current File",
"id": "repl_sml_run",
"args": {
"type": "subprocess",
"encoding": "utf8",
"cmd": ["sml", "$file_basename"],
"cwd": "$file_path",
"external_id": "sml",
"syntax": "Packages/SML (Standard ML)/sml.tmLanguage"
}
}
]
}]
}]
}
]
最后一步是为这两个命令添加键盘快捷方式。转到“首选项”->“按键绑定用户”,并使用以下两个额外的命令编辑文件。请随意更改我的键,并使用您认为合适的任何其他快捷键,前提是它们未用于其他功能。[
{
"keys":["ctrl+alt+j","k"],
"command": "repl_open",
"args": {
"type": "subprocess",
"encoding": "utf8",
"cmd": ["sml"],
"cwd": "$file_path",
"syntax": "Packages/SML (Standard ML)/sml.tmLanguage",
"external_id": "sml"
}
} ,
{
"keys":["ctrl+alt+j","m"],
"command": "repl_open",
"args": {
"type": "subprocess",
"encoding": "utf8",
"cmd": ["sml", "$file_basename"],
"cwd": "$file_path",
"syntax": "Packages/SML (Standard ML)/sml.tmLanguage",
"external_id": "sml"
}
}
]
完成了。现在,您只需按CTRL+J,K即可打开SML REPL(这是按Ctrl + Alt + J,然后释放键并按K)。如果您正在使用SML文件进行工作,则可以按CTRL+J,M将其发送到新的SML REPL会话中。
Sublime Text提供配置选项,允许您解析代码文件并确定是否存在问题,并告诉您问题所在的确切位置。为此,我们必须配置一个“构建系统”。该配置文件告诉Sublime Text要运行哪个命令以及如何解释输出。如果SML解析器无法解析或执行程序,则输出将告诉您问题所在的位置。构建系统允许我们定义一个正则表达式来解析这种输出,并帮助Sublime Text找到包含问题的行和列。
转到“首选项”->“浏览程序包”,在用户文件夹下创建一个名为SML.sublime-build
的新文件,并将文件定义如下:
{
"cmd": ["/usr/local/bin/sml","$file"],
"selector": "source.sml",
"working_dir": "$file_path",
"file_regex": "^(.*\\.sml):(\\d+)\\.(\\d+)(\\-(\\d+)\\.(\\d+))?\\s(.*)$"
}
请确保在你的系统中替换命令路径为有效路径。保存文件后,可以进入菜单并选择Tools -> Build System -> SML。然后,您可以使用Tools -> Build来解析文件并查找任何错误。通过使用菜单选项Tools -> Build Result -> Next Result和Previous Result,您可以在构建系统检测到的错误之间导航,并且Sublime Text将把光标定位到由SML编译器报告的错误的准确位置。
我上面的正则表达式可能不是最好的,所以随意进行改进。
就这样。使用SML和Sublime Text开始编码吧。
严格来说,Isabelle 环境用于交互式和自动定理证明,但其 SML IDE 支持 是相当复杂的:源文件在用户编辑时进行静态检查和语义评估。注释的源代码包含有关推断类型、定义位置引用等的标记。
快速开始,请查看文档面板中的示例部分,输入 src/Tools/SML/Examples.thy
(截至 Isabelle2014)。
Eclipse可以安装很多有用的功能,无需安装繁琐的特定语言插件。
我为新语言设置Eclipse的指南进行维护。以下是其中一些重点:
语法高亮可以使用Eclipse Colorer或插件来实现。这些插件提供了许多语言的语法高亮,包括SML和OCaml。可以使用自定义颜色文件轻松添加新语言。
要在Eclipse内部使用外部编译器进行构建,可以使用标准的程序构建器功能。当发出正常的构建项目命令时,将运行构建器。要设置新的构建器:项目属性 -> 构建器 -> 新建... -> 程序或使用下面的Laid Build Marker插件。
要从外部构建器中捕获编译错误和警告,可以使用构建输出解析器。 Laid Builder Marker是一个实现此类解析器的插件。解析器会在编辑器和问题视图中放置问题标记。此插件还可用于向项目添加程序构建器。Cabal的构建器可用作起点。
要从Eclipse内部运行编译的程序,请使用外部工具功能。 (运行 -> 外部工具)
可以使用其他Laid Project插件中的一些扩展支持代码导航和文本选择:可以使用Marker Block Selection插件选择括号包含的文本。可以使用Editor Utilities插件跳转到由空行分隔的代码块,等等。
使用标准的单词完成命令(Shift+Alt+7)作为简单的内容辅助。
使用标准的切换块选择命令(Shift+Alt+A)同时在多行上插入/删除行注释。
一些其他有用的标准Eclipse功能包括:
更新 Laid 项目的站点:
https://bitbucket.org/lii/laid_language_tools/src/master/se.lidestrom.laid.update_site/
更新 Eclipse Colorer 网站:
http://colorer.sourceforge.net/eclipsecolorer/