问题标签 [sml]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
type-inference - 类型推断的限制是什么?
类型推断的限制是什么?哪些类型的系统没有通用推理算法?
sml - 抑制标准 ML 中的“val it”输出
我正在用标准 ML (SML/NJ) 编写一个“脚本”,根据我的喜好设置交互式环境。脚本做的最后一件事是打印出一条消息,表明一切顺利。本质上,最后一行是这样的:
当我运行脚本时,一切顺利,但 SML 解释器显示打印函数的返回值。
由于我只是在屏幕上打印一些东西,我怎样才能抑制“val it = () : unit”输出,以便我看到的只是“SML 准备就绪”消息,然后是解释器提示?
data-structures - 什么是表示无向图的好数据结构?
我需要构建一个无向图。我不需要它做任何太花哨的事情,但理想情况下它会像这样工作:
SML/NJ 中是否有一个好的数据结构来模拟这些关系?我应该自己滚吗?
更新
我已经开始尝试自己滚动,但是当我尝试测试它时出现类型不匹配错误。我在 SML 结构和函子方面的经验非常基础,所以我认为我做的事情显然是错误的。我怎样才能让它工作?另外,你能帮我把它做成一个'a graph
吗?从语义上讲,这似乎更有意义。
代码
错误
当我做
我得到一个类型不匹配:
operators - 有没有办法在 SML/NJ 中获得二元运算符的 Curried 形式?
例如,而不是
我宁愿有
用于
显然我可以自己做这件事,例如,
但我想确保我不会错过更优雅的方式。
structure - 结构内部的签名
我想将签名/结构对放在结构中,如下所示:
但即使是最简单的示例也会产生错误:
似乎在结构内不允许签名。实现此功能的最佳方法是什么?
user-interface - 标准 ML 的 GUI?
出于好奇,我最近开始学习标准 ML。所以我所知道的是它有一个高效的编译器(MLton),它允许我们自由地使用抽象而不用担心性能。
如果我也可以使用标准 ML 进行一些 GUI 编程,那将是完美的。标准 ML 是否有类似 Gtk、Qt 或 WxWidgets 的绑定?
非常感谢你。
functional-programming - 标准机器学习入门
我正在寻找某种“面向初学者的机器学习”指南——到目前为止,谷歌已经引导我找到一些晦涩难懂的邮件列表或无法理解的文本。
问题是,到目前为止,我的函数式编程经验为零,并且围绕这些概念展开思考比预期的要困难得多。例如,我现在要做的任务(是的,大学:))是在两个列表(a,b)和(c,d)之间进行映射,因此结果是(a,d)的列表) 来自 b = c 的对。
我通常会做的是:
但是,我什至无法开始在 SML 中实现类似的东西。例如,我知道我可以用嵌套map f list
的 's 遍历列表。但是,运行时 (SML/NJ) 只接受仅将列表元素作为参数的函数。但是,如果我一次只能对两个列表之一进行操作,我怎么知道要返回哪些元素呢?
我迫切需要一种可以解决这种事情的资源,最好是带有友好的大字母和大量代码示例:/
functional-programming - SML/NJ - 匹配动态类型的模式
是否可以编写具有动态类型输入参数的函数?我尝试了模式匹配,但显然它不是这样工作的。
我想做这样的事情:
谢谢你。
functional-programming - 是什么导致了这个 Standard-ML 类型错误?
我试图制作这个非常简单的 SML 函数的尾递归版本:
在此过程中,我在参数上使用了类型注释。下面的代码显示了这一点,并导致类型错误(如下所示),而如果我只是删除类型注释,SML 会毫无问题地接受它,为整个函数提供与上面更简单的函数相同的签名。
错误:
给出了两个错误。后者在这里似乎不太重要,suffixes_helper 的两个子句不匹配。第一个是我不明白的。我注释说第一个参数是 type 'a:list
,第二个参数是 type 'b:list
。'b:list
Hindley-Milner 类型推理算法不应该是建立在我理解的一般统一之上的,能够'a:list list
使用 的替换来统一'b ---> 'a list
吗?
编辑:答案表明它可能与不允许推断类型的类型推断算法有关,从某种意义上说,推断类型比类型注释给出的更严格。我猜想这样的规则只适用于参数和整个函数的注释。我不知道这是否正确。无论如何,我尝试将类型注释移动到函数体,我得到了同样的错误:
现在的错误是:
if-statement - 莫斯科 ML - 一个函数中的多个 if 语句
我在功能的一部分上遇到了一些麻烦。我的函数需要至少 3 个字符的输入字符串以避免错误,为此需要添加一两个“。” 在变量中。看起来像这样:
功能码;
我的问题是,我如何结束第一个 if 行?因为现在是第二个 if 语句出错。
谢谢/乔金