考虑 2 个Scheme
函数
; Define function
(define (square n) (* n n ))
(square 12)
144
; Another way to define same function
(define square (lambda (n) (* n n)))
(square 12)
144
两者似乎产生相同的结果。
这些函数声明之间有什么功能上的区别吗?在某些情况下是否应该优先选择一个?
这两个定义没有区别——前者是后者的语法糖。
您更喜欢哪一个是风格问题,但我的印象是前者通常是定义函数的首选方式,因为它更简洁,也许也更具可读性。
介绍性文本经常使用后者来明确命名函数只是一个包含 lambda 的变量 - 在使用第一个变体时并不那么清楚。
sepp2k 是绝对正确的,因为您定义的两个过程是相同的。在像这样的简单程序定义中,要么是正确的,要么归结为偏好问题。
使用显式语句确实有意义的一种情况lambda
是,如果您需要跟踪过程中的某种状态。例如,我们可以制作这样的计数器:
(define counter
(let ((count 0))
(lambda ()
(set! count (+ count 1))
count)))
(counter) ;=> 1
(counter) ;=> 2
(counter) ;=> 3