为什么lambda而不是函数定义速记在scheme中被认为是好的风格?

为什么lambda而不是函数定义速记在scheme中被认为是好的风格?,lambda,scheme,shorthand,function-declaration,Lambda,Scheme,Shorthand,Function Declaration,在方案中,为什么会出现以下情况: (define foo (lambda (x) 42)) 被认为是比这更好的风格: (define (foo x) 42) 还有什么理由偏袒其中一种呢?我不认为这是更好的风格,第一种是多余的。真正的问题是您是定义命名函数foo,还是只使用lambda。如果您已经决定创建一个命名函数foo,那么我不明白您为什么要将lambda放入其中。lambda使您无需单独命名和定义所做的每一个小函数,因此这才是真正的决定:这个函数是否足够重要,可以单独定义

在方案中,为什么会出现以下情况:

(define foo
  (lambda (x)
    42))
被认为是比这更好的风格:

(define (foo x)
  42)

还有什么理由偏袒其中一种呢?

我不认为这是更好的风格,第一种是多余的。真正的问题是您是定义命名函数foo,还是只使用lambda。如果您已经决定创建一个命名函数foo,那么我不明白您为什么要将lambda放入其中。lambda使您无需单独命名和定义所做的每一个小函数,因此这才是真正的决定:这个函数是否足够重要,可以单独定义和命名。

我不认为这是更好的样式,第一个是多余的。真正的问题是您是定义命名函数foo,还是只使用lambda。如果您已经决定创建一个命名函数foo,那么我不明白您为什么要将lambda放入其中。lambda使您无需单独命名和定义所做的每一个小函数,因此这才是真正的决定:这个函数是否足够重要,可以单独定义和命名。

您在Javascript中显示的内容与此等效:

var foo = function(x) {42;}
vs

后者是前者的句法糖。第一种样式是通用形式,后者是定义函数的快捷方式


至于风格,我不知道为什么喜欢前者。它更长,需要更多的嵌套。

在Javascript中显示的内容与此等效:

var foo = function(x) {42;}
vs

后者是前者的句法糖。第一种样式是通用形式,后者是定义函数的快捷方式


至于风格,我不知道为什么喜欢前者。它更长,需要更多的嵌套。

如果风格是偏好的另一个词,那么我同意前者是更好的风格。它直截了当地说,foo是x的函数。很难出错。在第二个示例中,defun样式的参数是您以调用它的方式定义它


它相当于在C语言中声明指针变量时将*放在何处。这并不意味着什么:选择您喜欢的,或者选择您正在工作的小组已经决定的任何内容。没有人会误解你。

如果风格是偏好的另一个词,那么我同意前者是更好的风格。它直截了当地说,foo是x的函数。很难出错。在第二个示例中,defun样式的参数是您以调用它的方式定义它

它相当于在C语言中声明指针变量时将*放在何处。这并不意味着什么:选择您喜欢的,或者选择您正在工作的小组已经决定的任何内容。没有人会误解你。

这是因为

(define (foo x)
   42)
在语言中添加特殊形式

一,

这是一种特殊形式

二,

是另一种特殊形式,因此:

(define foo (lambda (x) (+ x 1)))
除上述2种形式外,未添加其他特殊形式

因此,为定义函数添加一个速记是一种语法上的甜点。由于scheme倾向于极简主义,因此该语言没有必要添加更多的特殊形式。现在我想:

(define foo (x) (+ x 1))
它是可读的,而且不需要花费太多的时间去记住和理解,所以我不介意把它放在计划中。

这是因为

(define (foo x)
   42)
在语言中添加特殊形式

一,

这是一种特殊形式

二,

是另一种特殊形式,因此:

(define foo (lambda (x) (+ x 1)))
除上述2种形式外,未添加其他特殊形式

因此,为定义函数添加一个速记是一种语法上的甜点。由于scheme倾向于极简主义,因此该语言没有必要添加更多的特殊形式。现在我想:

(define foo (x) (+ x 1))

是可读的,而且不需要花费太多的时间去记住和理解,所以我不介意把它放在scheme中。

根据什么样式指南?你在哪里读到样式1是首选的?我从未见过这样的事。Lambda用于匿名函数、连续传递、映射和返回闭包。它对很多事情都很有用,但我更喜欢使用define-fun x-y的简洁性…根据什么样式指南?你在哪里读到样式1是首选的?我从未见过这样的事。Lambda用于匿名函数、连续传递、映射和返回闭包。它对很多事情都很有用,但我更喜欢使用define-fun x-y的简洁性。。。。