Function “带”的函数是什么;记忆;?

Function “带”的函数是什么;记忆;?,function,functional-programming,scheme,racket,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)) 当我用例如(add4)运行这个时,我只得到“function:x-adder”。我不明白这个函数的用途,也不明白它有什么好处。 为什么上面的函数

我试图理解“内存”的函数是什么。例如:

;; 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))
当我用例如(add4)运行这个时,我只得到“function:x-adder”。我不明白这个函数的用途,也不明白它有什么好处。 为什么上面的函数是具有“记忆”的函数?什么是具有“记忆”的函数


我们将具有“记忆”的函数定义为与局部函数和高阶函数相结合的函数。但是我不明白:(

想象一下你想在一个一位数上加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))

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

T谢谢。快速提问:如果我想使用上面的加法函数,我必须用一个数字(y)调用x加法器,例如(x加法器2),对吗?只是x加法器什么都不做。@JacquesH这是一个函数值。
add1
(add1)
可以用同样的方式使用,例如
(map add1'(1 2 3));=>(2 3 4)
(map(add1)“(1 2 3));==>(2 3 4)
。求值
(add 1)
的值是一个函数,就像求值
add 1
的值一样。它们在不应用时的作用与函数值相同。