问题标签 [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.

0 投票
2 回答
769 浏览

sml - SML 函数调用不会将参数解析为参数

我在调用 SML 函数时遇到了一个优先问题,替代:

我从另一个函数调用它:

但我收到一个错误:

这似乎表明它正在尝试调用(替换 v),然后使用参数 new_var 调用该调用的结果。

我尝试在整个内容周围添加括号,但这没有帮助,当我在参数周围添加括号时,(v new_var...)它认为 v 是 new_var 上的函数应用程序。这个函数调用是怎么回事?

0 投票
3 回答
4814 浏览

sml - 如何在 SML 中打印类型信息?

在 SML 中执行命令后,返回“it”,其中包含命令返回的数据和类型。例如:

假设我在这样的程序中有一个绑定:

有没有办法以与“it”的打印方式类似的方式打印“argsToOutput”的值和数据类型(在程序中间)?

0 投票
8 回答
35552 浏览

haskell - 适合初学者的 Haskell 还是标准 ML?

我将教授离散结构的低年级课程。我之所以选择教科书《离散结构、逻辑和可计算性》,部分原因是它包含有助于使用函数式编程语言实现的示例和概念。(我也认为这是一本很好的教科书。)

我想要一种易于理解的 FP 语言来说明 DS 概念并且学生可以使用。大多数学生最多只有一两个学期的 Java 编程。在查看了 Scheme、Erlang、Haskell、Ocaml 和 SML 之后,我选择了 Haskell 或 Standard ML。出于以下概述的原因,我倾向于 Haskell,但我希望那些在其中一个或另一个中活跃的程序员的意见。

  • Haskell 和 SML 都具有模式匹配,这使得描述递归算法变得轻而易举。
  • Haskell 有很好的列表推导,可以很好地匹配这些列表的数学表达方式。
  • Haskell 有惰性求值。非常适合使用列表理解技术构建无限列表。
  • SML 有一个真正的交互式解释器,可以在其中定义和使用函数。在 Haskell 中,函数必须在单独的文件中定义并在用于交互式 shell 之前进行编译。
  • SML 以易于理解的语法明确确认函数参数和返回类型。例如:val foo = fn : int * int -> int。Haskell 的隐式 curry 语法有点迟钝,但并不完全陌生。例如:foo :: Int -> Int -> Int。
  • Haskell 默认使用任意精度的整数。它是 SML/NJ 中的一个外部库。SML/NJ 默认将输出截断为 70 个字符。
  • Haskell 的 lambda 语法很微妙——它使用单个反斜杠。SML 更明确。不过,不确定我们是否会在这个类中需要 lambda。

本质上,SML 和 Haskell 大致等价。我倾向于 Haskell,因为我喜欢 Haskell 中的列表推导和无限列表。但我担心 Haskell 紧凑语法中大量的符号可能会给学生带来问题。根据我在 SO 上阅读其他帖子所收集到的信息,不建议从 FP 开始的初学者使用 Haskell。但我们不会构建成熟的应用程序,只是尝试简单的算法。

你怎么看?


编辑:在阅读了您的一些出色回复后,我应该澄清一些要点。

在 SML 中,在解释器中定义函数和在外部文件中定义函数之间没有语法上的区别。假设您要编写阶乘函数。在 Haskell 中,您可以将此定义放入文件中并将其加载到 GHCi 中:

对我来说,这很清楚、简洁,并且符合书中的数学定义。但是如果你想直接在 GHCi 中编写函数,你必须使用不同的语法:

当使用交互式解释器时,从教学的角度来看,当学生可以在文件和命令行中使用相同的代码时,非常非常方便。

“显式确认函数”是指在定义函数时,SML 会立即告诉您函数的名称、参数的类型和返回类型。在 Haskell 中,你必须使用:type命令,然后你会得到有点令人困惑的咖喱符号。

Haskell 还有一件很酷的事情——这是一个有效的函数定义:

同样,这符合他们可能在教科书中找到的定义。在 SML 中不能这样做!

0 投票
4 回答
20391 浏览

functional-programming - SML/NJ 中的循环

我对 SNL/NJ 很陌生,想知道如何完成以下任务:

像这样的东西,但我如何减少?:

0 投票
6 回答
551 浏览

functional-programming - 函数式:构造一个整数列表 1..n

这不是家庭作业。我正在自学标准机器学习。我也懂一点 Scheme,所以这个问题应该可以用任何一种语言来回答。

我自己强加的任务是编写一个函数来构造一个从 1 到 n 的整数列表。例如,list(7) 应该返回 [1,2,3,4,5,6,7]。O(n) 解决方案将是理想的。

很容易在线性时间内反向构造一个列表(即 [n,n-1,..,1]):

我尝试构建一个列表是 O(n^2) 因为追加操作是线性的。

我的下一个尝试是通过从 ni​​l 开始,将 n 附加到前面,然后向后递归到 1 来构建从末端到前面(从右到左)的列表。但它根本不起作用。

有些东西让我觉得我需要一个帮助函数来构建未终止的列表以用于递归,但我很难过。

0 投票
2 回答
1334 浏览

integer - ML中数字的素数

在 ML 中,我想得到一个数字的主要除数。我该怎么做,我是初学者。

0 投票
5 回答
1537 浏览

compiler-construction - 在“真实世界”应用程序中使用机器学习

我真的很喜欢在大学学习机器学习。我发现函数式编程通常是编写某些算法的一种令人耳目一新的优雅方式。我听说过 F# 并且玩过它。尽管如此,我还是在 ML 中编写了一些有趣的函数,并希望将它们集成为可以在其他应用程序中使用的库。

通常我将我的函数粘贴到 SMLnj 解释器中。有没有办法可以将它们编译下来?

0 投票
3 回答
378 浏览

ocaml - 在纯函数式 ML 中进行 N 维游走?

这个想法是遍历多个维度,每个维度都定义为一个范围

所以函数类似于fun foo y xfun foo z y x可以应用于整个正方形 X Y 或立方体 X Y*Z。

SML/NJ 不喜欢我在下面的实现:

这是代码:

这种构造甚至可能吗?

欢迎任何指针。

0 投票
2 回答
579 浏览

sml - 确保 SML 中的特定类型结果

我试图创建一个返回“point”类型元素的函数:

SMLNJ似乎不理解我的意图,即结果也应该是“点”类型:

0 投票
5 回答
1635 浏览

functional-programming - 标准 ML/NJ 的 BigInt

标准 ML 是否有 Java BigInt 等价物?正常的 int 类型在溢出时会抛出异常。