Function 为匿名函数指定名称与定义它们;通常是;

Function 为匿名函数指定名称与定义它们;通常是;,function,racket,Function,Racket,我经常在球拍文档/手册中找到如下内容: (define greet (λ (name) (format "Hello, ~a!" name))) 我不认为这比: (define (greet name) (format "Hello, ~a!" name)) 将函数分配给名称而不是(define(ident args…)exprs…)通常的方式类似于JS中的相同内容: // "usual" declaration function greet (name) { return

我经常在球拍文档/手册中找到如下内容:

(define greet
    (λ (name) (format "Hello, ~a!" name)))
我不认为这比:

(define (greet name)
    (format "Hello, ~a!" name))
将函数分配给名称而不是
(define(ident args…)exprs…
)通常的方式类似于JS中的相同内容:

// "usual" declaration
function greet (name) { return `Hello ${name}!` };     

// assigning
const greet = name => `Hello, ${name}!`;
const greet = function (name) { return `Hello ${name}!` };
或者Python(不使用,因为lambda不仅仅是函数;它们不太有用):

  • 在JS中,
    const greet
    (本地)的范围不同于
    函数greet
    (全局)的范围,因此更喜欢
    const greet
  • 在Python中,
    lambda
    s只能有一个表达式作为其返回值;您可能不会声明或分配变量,因此更喜欢正确的定义
据我所知,
(define(ident-args…)exprs…
(define-ident(λ(args…)exprs…
)之间的范围界定或允许的语句类型没有区别


为什么一种语言比另一种语言更常用?有什么优势吗?是可读性、个人偏好还是惯用性?

没有区别

大多数人更喜欢语法
(define(greet name)…)
。如果你想强调函数是值,那么写
(define greet(lambda(name)…))
是有意义的。在印第安纳大学,语法
(define greet(lambda(name)…)
就是用来强调这一点的(函数是第一类值)

def greet(name): return f"Hello, {name}!" # full definition

greet = lambda name: f"Hello {name}!"      # not idiomatic