在计划中,为什么会这样:
(define foo
(lambda (x)
42))
认为比这更好的风格:
(define (foo x)
42)
有没有理由支持其他人?
答案 0 :(得分:4)
我认为这不是更好的风格,首先是多余的。真正的问题是,您是定义命名函数foo
还是仅使用lambda
。如果您已经决定创建一个命名函数foo
,那么我不明白为什么要将lambda
放在里面。 lambda
使你无需单独命名和定义你所做的每一个小函数,所以这就是决定的地方:这个函数非常重要,可以单独定义和命名。
答案 1 :(得分:0)
您在Javascript中显示的内容与此相同:
var foo = function(x) {42;}
VS
function foo(x) {
42;
}
后者是前者的语法糖。第一种风格是一般形式,后者是定义功能的捷径。
至于风格,我不知道为什么前者会更受欢迎。它更长,需要更多的嵌套。
答案 2 :(得分:0)
如果风格是另一个偏好的词,那么我同意前者是一种更好的风格。它直截了当地说,“foo是x的函数”。那里很难出错。第二个示例中“defun”样式的参数是您按照调用它的方式定义它。
当你在C中声明一个指针变量时,它就是你把*放在哪里。没有任何意义:选择你喜欢的,或者你正在使用的任何组已经决定了。没有人会误解你。
答案 3 :(得分:0)
这是因为
(define (foo x)
42)
在语言中添加特殊表格。
1
(define foo 45)
是一种特殊形式
2
(lambda (x) (+ x 1)
是另一种特殊形式:
(define foo (lambda (x) (+ x 1)))
除上述2之外,没有添加任何其他特殊表格。
因此,添加定义函数的简写是一种语法糖。由于计划往往是极简主义,因此语言不必添加比必要更多的特殊形式。现在我想:
(define foo (x) (+ x 1))
具有可读性,并且不需要记住和理解,所以我不介意在计划中使用它。