【问题标题】:chez scheme special lambdachez 计划特殊 lambda
【发布时间】:2023-03-14 03:55:01
【问题描述】:
(lambda (head . rest)
     (...))

我在尝试学习一些方案时在网上遇到了这段代码,但我找不到任何有用的解释。

这是什么意思?是像 ML 中的某种模式匹配吗? (顺便说一句,他们只将此 lambda 应用于一个参数!)

【问题讨论】:

    标签: lambda scheme apply


    【解决方案1】:

    在这个过程中:

    (lambda (arg . args)
         (...))
    

    语法表明lambda 表单需要一个绑定到名称arg 的强制参数和一个绑定到名称args 的包含零个或多个元素(可变数量的参数)的列表。这是variadic function 的示例。

    同样的语法可以用于命名过程,注意任意数量的参数可以被指定为强制的,然后其余的被认为是可选的;看看这个例子:

    (define (test arg . args)
      (apply + arg args))
    
    (test)        ; will cause an error, at least one argument is expected
    (test 10)     ; returns 10
    (test 10 4)   ; returns 14
    (test 10 4 2) ; returns 16
    

    【讨论】:

    • 你可以更简单地把函数写成 (define (test arg . args) (apply + arg args))。
    【解决方案2】:

    这是»点尾表示法«。它允许您将任意数量的参数传递给函数。如需解释,请考虑 SICP, exercise 2.20(请向下滚动)。

    【讨论】:

      猜你喜欢
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 2019-09-29
      • 2021-08-15
      • 2018-04-27
      • 2017-01-28
      • 1970-01-01
      相关资源
      最近更新 更多