gpt4 book ai didi

scheme - 测试Scheme中变量的定义性

转载 作者:行者123 更新时间:2023-12-02 21:14:29 24 4
gpt4 key购买 nike

除了像(定义变量值)这样的常规定义之外,当变量稍后使用设置!的帮助。

是否有程序允许测试符号是否是定义的(不一定是初始化的)变量?像 (define? 'variable) 这样的东西,如果定义了 variable 则应该返回 #t ,否则返回 #f

最佳答案

(define var) 形式是非标准扩展。

根据 R5RS define 有以下形式之一:

(define <variable> <expression>)
(define (<variable> <formals>) <body>)
(define (<variable> . <formal>) <body>)

据我所知,R6RS 和 R7RS 也是如此。

在您的实现中,(define foo) 很可能扩展为 (define foo the-undefined-value)。这意味着您可以使用 (if (eq? foo the-undefined-value) ...) 来测试 foo` 是否已初始化。

http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-8.html#%_idx_190

更新:

我检查了 R6RS,上面写着:

(define <variable> <unspecified>)
where <unspecified> is a side-effect-free expression returning
an unspecified value.

考虑

(define foo)
(define bar)

由实现者决定是否将相同的未指定值绑定(bind)到 foobar

试试这个程序:

(define unspecified)
(define unspecified1)
(eq? unspecified unspecified1)

如果程序的计算结果为#t,那么您可以编写一个initialized? 谓词,如下所示:

(define unspecified)
(define (initialized? x) (not (eq? x unspecified)))

(define test)
(initialized? test)
(set! test 42)
(initialized? test)

关于scheme - 测试Scheme中变量的定义性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31562098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com