问题标签 [ml]
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.
haskell - 哪些语言实现了函数式编程的特性?
Lisp 很早就在学术界开发了一组有趣的语言特性,但其中大多数从未在生产环境中流行起来。
一些语言,比如 JavaScript,适应了垃圾收集和词法闭包等基本特性,但所有可能真正改变大规模编写程序方式的东西,比如强大的宏、代码即数据和自定义控制结构,只是似乎在其他函数式语言中传播,这些语言都不适用于非平凡的项目。
函数式编程社区还提出了许多其他有趣的想法(除了函数式编程本身),例如引用透明性、通用大小写表达式(即模式匹配,不像 C/C# 开关那样残缺不全)和柯里化函数,这似乎在常规编程中显然很有用,并且应该很容易与现有的编程实践集成,但由于某种原因似乎永远停留在学术界。
为什么这些功能很难被采用?是否有任何现代实用的语言实际上从 Lisp 中学习,而不是半途而废地复制“一流的功能”,或者是否存在使这不可能的内在冲突?
queue - 如何在 SML/NJ 中使用队列库
我看到 SML/NJ 包含一个队列结构。我不知道如何使用它。如何使用 SML/NJ 提供的附加库?
haskell - 理解类型错误:“预期签名 Int*Int->Int 但得到 Int*Int->Int”
Steve Yegge关于服务器端 Javascript的帖子的评论开始讨论语言中类型系统的优点,该评论描述了:
...来自HM风格系统的示例,您可以在其中获得以下内容:
你能举一个函数定义的例子(或两个?)和一个会产生该错误的函数调用吗?看起来在大型程序中调试可能非常困难。
另外,我可能在Miranda看到过类似的错误吗?(我已经 15 年没用过了,所以我对它的记忆很模糊)
ocaml - SML 和 OCaml 有什么区别?
是什么让这两种 ML 方言区分开来?
ocaml - 在纯函数式 ML 中进行 N 维游走?
这个想法是遍历多个维度,每个维度都定义为一个范围
所以函数类似于fun foo y x
或fun foo z y x
可以应用于整个正方形 X Y 或立方体 X Y*Z。
SML/NJ 不喜欢我在下面的实现:
这是代码:
这种构造甚至可能吗?
欢迎任何指针。
ide - 用于在 Windows 上编程 ML 的编辑器?
我知道我可以使用 Emacs,但我之前没有使用过它......还有其他选择吗?
谢谢
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) 只接受仅将列表元素作为参数的函数。但是,如果我一次只能对两个列表之一进行操作,我怎么知道要返回哪些元素呢?
我迫切需要一种可以解决这种事情的资源,最好是带有友好的大字母和大量代码示例:/
ml - 这个标准 ML 代码究竟做了什么?
我正在阅读 Chris Okasaki 的纯函数式数据结构,我遇到了一个问题。它位于这里。特别是,我不明白rotate
andexec
函数是如何工作的:
有人可以用愚蠢的人的话来形容吗?我仍在学习基于 ML 的语言。:-)
haskell - 推断类型似乎检测到无限循环,但到底发生了什么?
在 Andrew Koenig 的关于 ML 类型推断的轶事中,作者使用归并排序的实现作为 ML 的学习练习,并且很高兴发现“不正确”的类型推断。
令我惊讶的是,编译器报告了一种
换句话说,这个排序函数接受任何类型的列表并返回一个整数列表。
那是不可能的。输出必须是输入的排列;它怎么可能有不同的类型?读者肯定会发现我的第一个冲动很熟悉:我想知道我是否在编译器中发现了一个错误!
再想一想,我意识到还有另一种方法可以让函数忽略它的参数:也许它有时根本不返回。事实上,当我尝试它时,这正是发生的事情:
sort(nil)
确实 returnnil
,但是对任何非空列表进行排序都会进入无限递归循环。
翻译成 Haskell 时
GHC 推断出类似的类型:
Damas-Hindley-Milner 算法如何推断这种类型?