【问题标题】:What are functions with "memory"?“记忆”的功能是什么?
【发布时间】:2018-05-02 11:50:22
【问题描述】:

我试图了解“记忆”的功能是什么。一个例子是这样的:

;; add : number -> (number -> number)
;; to create a function that adds x to its input
(define (add x)
(local ((define (x-adder y) (+ x y))) x-adder))

当我运行它时,例如(添加 4)我刚刚得到“函数:x-adder”。我不明白这个功能的目的或它有什么用处。 为什么上面的函数是带有“内存”的函数,而带有“内存”的函数到底是什么?

我们将带有“内存”的函数定义为结合了本地和高阶函数的函数。但我不明白:(

【问题讨论】:

    标签: function functional-programming scheme racket


    【解决方案1】:

    假设您想将 30 添加到一位数:

    (+ 30 5)
    ; ==> 35
    

    你可以把它变成一个函数:

    (define (add30 x)
      (+ 30 x))
    

    但也许你有很多这样的函数,所以你创建了一个函数,它只需要添加第一个元素并返回一个接收第二个数字的函数。这就是你的add。你可以这样写add30

    (define add30 (add 30))
    

    现在假设您想将 30 添加到整个列表中:

    (define (digit-list->ascii-list lst)
      (map (add 30) lst))
    

    那么(add 30) 是什么......它返回一个x-adder,其中x 绑定到30map 只提供一个参数,它变成 30+y。您可以说生成的函数记住了30,但技术术语是变量 30 已被关闭。返回的函数是一个闭包。

    【讨论】:

    • 谢谢。快速提问:如果我想使用上面的 add 函数,我必须用数字 (y) 调用 x-adder,例如(x-加法器 2),对吧?只是 x-adder 什么都不做。
    • @JacquesH 这是一个函数值。 add1(add 1) 可以以相同的方式使用,例如。 (map add1 '(1 2 3)) ; ==> (2 3 4)(map (add 1) '(1 2 3)) ; ==> (2 3 4)。评估 (add 1) 的值是一个函数,就像评估 add1 的值一样。不应用时,它们的作用与函数值一样多。
    猜你喜欢
    • 2019-07-05
    • 2010-12-28
    • 2011-04-26
    • 2015-12-07
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    相关资源
    最近更新 更多