test1
:
(define test1
(lambda (x) (* x x)))
和test2
(define (test2 x)
(lambda (x) (* x x)))
Aren都认为是相同的。当我测试test1
时,我得到了正确答案,但test2
返回#<function>
或(lambda (a1) ...)
为什么?
答案 0 :(得分:1)
Test1相当于
(define (test3 x)
(* x x))
在test2中你有一个lambda太多了。
答案 1 :(得分:1)
(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)
所以会发生的是make-less-than
返回一个函数,该函数检查传递的参数是否小于value
,在本例中为10
。它可以重用于其他值。只有一次你可以写下:
(filter (lambda (v) (< v 10)) '(9 10 1 11 4 19))