我正在学习球拍,以前我用lambda
来定义我的功能。但我发现并不需要使用它(据我所知)。
我已经在DrRacket中尝试了这两个函数,并且都返回了相同的结果:
#lang racket
(define factorial
(lambda (number)
(cond ((not (number? number))
(error 'factorial "number is not a number"))
((equal? number 0)
1)
(else
(* number (factorial (- number 1)))))))
(define (factorial1 number)
(cond ((not (number? number))
(error 'factorial1 "number is not a number"))
((equal? number 0)
1)
(else
(* number (factorial1 (- number 1))))))
第二个factorial1
不使用lambda。
我必须声明一个函数时需要使用lambda
吗?
答案 0 :(得分:0)
如评论中所述,您无需使用lambda
。使用非lambda版本定义函数也许更常规,更方便
如果在DrRacket中使用宏步进器,则可以看到程序的扩展方式。 (define (factorial1 number) etc.)
变为以下内容:
(define-values (factorial1)
(lambda (number)
(if (#%app not (#%app number? number))
(let-values () (#%app error 'factorial1 (quote "number is not a number")))
(if (#%app equal? number (quote 0))
(let-values () (quote 1))
(let-values () (#%app * number (#%app factorial1 (#%app - number (quote 1)))))))))
有趣的是,两种define
形式(函数定义和值形式)都扩展为define-values