DrRacket:lambda匿名函数

DrRacket:lambda匿名函数,lambda,scheme,racket,Lambda,Scheme,Racket,test1之间的区别是什么: (define test1 (lambda (x) (* x x))) 和test2 (define (test2 x) (lambda (x) (* x x))) 他们不是都应该是一样的吗。当我测试test1时,我得到了正确的答案,但是test2返回或(lambda(a1)… 为什么会这样?Test1相当于 (define (test3 x) (* x x)) 在测试2中,lambda太多了 (define (func-name argume

test1
之间的区别是什么:

(define test1
  (lambda (x) (* x x)))
test2

(define (test2 x)
  (lambda (x) (* x x)))
他们不是都应该是一样的吗。当我测试
test1
时,我得到了正确的答案,但是
test2
返回
(lambda(a1)…

为什么会这样?

Test1相当于

(define (test3 x)
    (* x x))
在测试2中,lambda太多了

(define (func-name argument)
  body))
这将变量
func name
定义为一个函数,该函数使用一个参数作为函数的内容,参数的主体为
body
。它是以下内容的缩写:

(define func-name (lambda (argument)
  body)
因此,您的第二个示例可以这样编写:

(define test2 
  (lambda (x)
    (lambda (x) (* x x))))
test2
是一个返回函数的函数。另外,由于
x
在这两个函数中都使用,因此内部函数将永远无法访问参数。想象一下:

(define (make-less-than value)
  (lambda (arg)
    (< arg value))

(filter (make-less-than 10) '(9 10 1 11 4 19))
; ==> (9 1 4)
(filter (lambda (v) (< v 10)) '(9 10 1 11 4 19))