定义有lambda和没有lambda的scheme函数有区别吗

定义有lambda和没有lambda的scheme函数有区别吗,lambda,scheme,Lambda,Scheme,考虑2个方案功能 ; 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 两者似乎产生了相同的结果 这些函数声明之间是否有任何函数差异?在某些情况下,一种定义应该优先于另一种吗?这两种定义之间没有区别——前者是后者的语法糖 你喜欢哪一种是风格的

考虑2个
方案
功能

; 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

的确当我第一次看到第一个声明时,我理解它是一个函数声明。我没有想到它是一个保存lambda的变量声明。非常感谢。