为什么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的简洁性。。。。