gpt4 book ai didi

scheme - Let 语言的契约(Contract)

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:36 24 4
gpt4 key购买 nike

我看到一个问题,它用一种叫做 let 的宠物语言询问方法的契约。语言并不重要,但契约是否意味着该方法作为参数的东西及其评估后的值?

(define extend-env*
(lambda (syms vals old-env)
(if (null? syms)
old-env
(extended-env-record
(car syms)
(car vals)
(extend-env* (cdr syms)
(cdr vals)
old-env)))))

所以这里的方法采用一个符号、一个值和一个环境,我认为它会产生一个新的环境。这是否意味着此方法的契约(Contract)是 Identifier(Variable),Value,Environment = Environment?

最佳答案

你的函数是这样开始的:

(lambda (syms vals old-env) ...)

这里 sym 代表符号,因此 syms 代表 符号列表 又名 符号列表 .同样,vals 代表值列表。最后 old-env 是一个环境。

这涵盖了函数的输入。要确认 syms 应该是符号列表,请查看 syms 在正文中的使用方式。我们看到您使用了:(null? syms)(car syms)(cdr syms)。这意味着我们猜对了。

要查看输出类型,请查找产生返回值的表达式。最简单的是old-env,这是一个环境。如果函数总是返回相同类型的值,我们就确定输出是一个环境。最好检查其他返回表达式是否也返回环境。

总结一下:从Racket看到的contract是:

extend-env* : list-of-symbols list-of-values environment -> environment

现在在你的程序中,符号代表标识符,所以你也可以这样写:

extend-env* : list-of-identifiers list-of-values environment -> environment

如果您记录标识符表示为符号。

关于scheme - Let 语言的契约(Contract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33668644/

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