ML模块系统是数据抽象的编程语言支持的高水准标志。 然而,从表面上看,它似乎很容易用支持抽象types成员的面向对象语言进行编码。 例如,我们可以在Scala中对SML模块系统的元素进行编码,如下所示: SML签名:没有具体成员的斯卡拉特质 具有给定特征的SML结构:扩展给定特征的Scala对象 通过给定签名参数化的SML函子:Scala类将扩展给定特征的对象作为构造函数参数 有什么重要的function,这样的编码会错过? 任何可以用SML模块表示的编码无法expression的东西? SML使这种编码无法做到的任何保证?
我开始学习标准ML,现在我尝试使用新泽西州编译器的标准ML。 现在我可以使用交互式循环,但我怎样才能将源文件编译为独立的可执行文件? 例如,在C中,可以只写 $ gcc hello_world.c -o helloworld 然后运行helloworld二进制。 我阅读SML NJ编译pipe理器的文档,但没有任何明确的例子。 另外,还有另一个SML编译器(允许独立的二进制创build)可用吗?
我一直在试图解释开关语句和模式匹配(F#)之间的区别,但我没有真正能够解释它..大多数时候,他们只是看着我说“那么为什么你不要只是使用..如果..“。 你将如何解释给他们? 编辑! 感谢大家的伟大的答案,我真的希望我可以标记多个正确的答案。
众所周知,Haskell风格的types类和ML风格的模块为指定接口提供了不同的机制。 他们(可能)的权力是相等的,但实际上每个人都有自己的利益和弊端。 因为在语言特性方面我是一个包容性的人,所以我的问题是:在Haskell中joinML风格的模块有什么主要的理论困难? 我感兴趣的答复如下: 什么样的现有types系统function与ML风格模块交互不良? (一个糟糕的交互的例子是GADT和函数依赖,尽pipefundeps在技术上等同于关联的types!) 为了编译ML风格的模块,编译器最后必须放弃哪些东西? ML风格模块如何与types推断进行交互? 相关阅读: 罗伯特·哈珀的post引发了这个问题 讨论Haskell Reddit
我将要以分散的结构教授一门低级课程。 我select了离散结构,逻辑和可计算性的教科书,部分原因是它包含有助于用函数式编程语言实现的示例和概念。 (我也认为这是一本很好的教科书。) 我想要一个易于理解的FP语言来说明DS的概念,并且学生可以使用。 充其量,大多math生在Java中只有一到两个学期的程序devise。 看过Scheme,Erlang,Haskell,Ocaml和SML之后,我已经select了Haskell或Standard ML。 我倾向于Haskell出于下面列出的原因,但我希望那些积极的程序员的意见,在一个或另一个。 Haskell和SML都有模式匹配,这使得描述recursionalgorithm变得简单。 哈斯克尔有很好的列表理解,很好地匹配这样的列表在math上expression。 Haskell有懒惰的评价。 非常适合使用列表理解技术构build无限列表。 SML有一个真正的交互式解释器,可以在其中定义和使用函数。 在Haskell中,函数必须在单独的文件中定义并在交互式shell中使用之前进行编译。 SML以一种容易理解的语法给出了函数参数和返回types的明确确认。 例如:val foo = fn:int * int – > int。 哈斯克尔的隐含的咖喱语法更为呆板,但并不完全陌生。 例如:foo :: Int – > Int – > Int。 Haskell默认使用任意精度的整数。 这是SML / NJ的外部图书馆。 SML / NJ会将输出截断为70个字符。 Haskell的lambda语法是微妙的 – 它使用一个反斜杠。 SML更加明确。 不知道我们是否需要这门课的lambda。 本质上,SML和Haskell大致相同。 我倾向于Haskell,因为我喜欢Haskell中的列表理解和无限列表。 但是我担心Haskell的紧凑语法中大量的符号可能会导致学生的问题。 从我读过的其他文章中可以看出,Haskell不推荐用于FP的初学者。 但是我们不打算构build完整的应用程序,只是尝试简单的algorithm。 你怎么看? 编辑:在阅读你的一些很好的回应,我应该澄清我的一些要点。 在SML中,在解释器中定义函数和在外部文件中定义函数之间没有语法上的区别。 假设你想写出阶乘函数。 […]
两个ML方言的区别是什么?