【问题标题】:Abstraction in SMLSML 中的抽象
【发布时间】:2015-11-04 23:57:21
【问题描述】:

目前,我在德国的大学里对编程和学习标准 ML 还很陌生。 我的问题是:

什么是抽象,我为什么要使用它?而且:为什么我可以通过使用“val it=...”来调用它们?

例如:

fn (x:int) => x*x:
it 6;
val it = 36;

还有一个例子:

(fn (x:int)=>x*x) 7
val it = 49;

为什么会这样?我的导师无法给我一个准确的答案,所以我想你们可以把你们的知识借给我。

谢谢你的期待!

【问题讨论】:

    标签: sml abstraction


    【解决方案1】:

    你问了两个问题:

    什么是抽象,我为什么要使用[them]?

    抽象不是标准 ML 特有的功能。它是一种管理复杂性的技术。请参阅Abstraction in Computer Science 上的维基百科文章。面向对象编程中的对象是管理复杂性的一种抽象,但在标准 ML 中,您将主要使用函数来创建抽象。

    即每当一个函数做了很多事情时,它不必看起来很复杂,因为它可以调用较小的函数来单独执行部分计算。每个小部分在其有限的责任范围内都很容易理解。

    为什么(fn (x:int)=>x*x) 7 会这样工作?

    我不确定您在这里指的是什么。每当您将表达式写入交互式解释器时,而不是像 val x = 42; 或 val f = fn x => x*x; 这样的声明,交互式解释器都会假定隐含的 val it = ...whatever you typed...。

    在这种情况下,它是一个匿名函数,将其输入平方应用于整数 7。它是否临时命名为 it 不应该影响结果。这不完全是标准 ML 程序的较小部分的抽象示例。

    【讨论】:

    • 我认为 OP 只问了一个问题。在上下文中,我将“抽象”读作“lambda 抽象”的简写,后者是匿名函数的另一个名称。
    • 非常感谢您的快速回答。这真的帮助了我。
    • 谢谢,约翰。你可能是对的。我从未听说过将 lambdas 称为抽象,而是统称为 an 抽象。 :)
    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 2012-09-16
    • 2016-03-12
    • 2012-09-21
    • 2015-08-02
    • 2018-07-11
    • 2013-06-10
    相关资源
    最近更新 更多