在Scheme中的条件表达式中使用define

问题描述 投票:1回答:1

在Scheme中,过程定义的一般形式是:

(定义({name} {parameters >>}){body})]

其中{body

}接受一个表达式序列,允许进行这种过程定义:
> (define (f) (define x 1) (define y 1) (define z 1) (+ x y z))
> (f)
3

同样,条件表达式

的一般形式是:

(cond({predicate

} {expression})({predicate} {expression})…({predicate} {expression] >}))

其中每个子句中的<< [表达式

}接受一系列表达式,从而允许这种条件表达式:
> (cond (#t 1 2 3) (#t 4)) 3

但是为什么不能像过程定义那样在条件表达式的表达式序列中使用define

> (cond (#t (define x 1) (define y 1) (define z 1) (+ x y z)) (#t 4)) ERROR on line 1: unexpected define: (define x 1)

Note。 —我正在MacOS 10.15.2上使用Chibi-Scheme 0.8.0实现。

在Scheme中,过程定义的一般形式是:(define({name} {parameters}){body})其中{body}接受一个表达式序列,允许这种过程定义:>(...

正如@Barmar指出的那样,

definitions

不是expressions,但是在两个上下文中都允许同时使用两个上下文(请参阅R7RS的5.1节,强调我的内容:]]
    在程序的最外层;
  • 在身体的开头。
  • Scheme程序由一个或多个导入声明以及后面的一系列表达式和定义组成。导入声明指定程序或库所依赖的库;库导出的标识符的子集可用于程序。表达式在第4章中进行了描述。定义是变量定义,语法定义或记录类型定义,所有这些内容都将在本章中进行介绍。

    它们在某些允许表达式的环境中有效,但并非在所有情况下都是有效的,特别是在⟨programmost的最外层和⟨body⟩的开头。

  • scheme naming conditional-operator
    1个回答
    0
    投票
    正如@Barmar指出的那样,

    definitions

    © www.soinside.com 2019 - 2024. All rights reserved.