DrRacket:lambda匿名函数

时间:2018-03-14 17:09:53

标签: lambda scheme racket

test1

之间有什么区别?
(define test1
  (lambda (x) (* x x)))

test2

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

Aren都认为是相同的。当我测试test1时,我得到了正确答案,但test2返回#<function>(lambda (a1) ...)

为什么?

2 个答案:

答案 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))