【问题标题】:Can I define a variable in the middle of a body?我可以在主体中间定义一个变量吗?
【发布时间】:2021-12-27 08:26:39
【问题描述】:

define不在程序的最外层时,define可以出现在主体的中间吗?例如:

(define (f x)
  (display x)
  (define n 1)  ; <- Is this allowed?
  (+ n x))

或者内部defines 必须总是出现在正文的开头?例如:

(define (f x)
  (define n 1)  ; <-
  (display x)
  (+ n x))

【问题讨论】:

    标签: scheme language-lawyer


    【解决方案1】:

    定义必须在函数体的开头。来自R7RS 的第 5.3.2 节:

    5.3.2。内部定义
    定义可以出现在

    的开头(即 是,lambdaletlet*letrecletrec* 的主体, let-values, let*-values, let-syntax, letrec-syntax, parameterizeguardcase-lambda)。请注意,这样的 身体可能不明显,直到在其他扩展之后 句法。这样的定义被称为内部定义 与上面描述的全局定义相反。

    【讨论】:

    • 为什么该部分列出“lambda, let, let*, ...”,而不是define
    • 因为define 只是lambda 的快捷方式。
    • (define (func ...args) body) 只是 (define func (lambda (...args) body)) 的缩写
    猜你喜欢
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多