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

时间:2010-08-05 20:38:06

标签: lambda scheme shorthand function-declaration

在计划中,为什么会这样:

(define foo
  (lambda (x)
    42))

认为比这更好的风格:

(define (foo x)
  42)

有没有理由支持其他人?

4 个答案:

答案 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))

具有可读性,并且不需要记住和理解,所以我不介意在计划中使用它。