有什么功能"记忆"?

时间:2017-11-18 23:08:34

标签: function functional-programming scheme racket

我试图了解"内存"是。一个例子就是:

;; 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"。我不了解这个功能的目的或者它有什么好处。 为什么函数位于带有" memory"的函数之上?什么是"记忆"?

我们使用" memory"定义了函数。作为功​​能与本地和更高阶函数相结合。但我不明白:(

1 个答案:

答案 0 :(得分:3)

想象一下,您想要将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的变量。返回的函数是一个闭包。