Scheme 这个计划是做什么的?

Scheme 这个计划是做什么的?,scheme,Scheme,我不知道如何使用scheme val?。为什么有一个x,为什么我们返回#t? 环境是将变量与值关联的函数 所以在这个例子中,我们将x=1和y=#f关联起来,对吗 谢谢。在scheme中,#t表示布尔值为true,#f表示false。我不完全理解其余的内容,但我建议DrRacket的调试器看看发生了什么 #lang eopl (define-datatype env env? (empty-env) (extended-env (var symbol?)

我不知道如何使用
scheme val?
。为什么有一个
x
,为什么我们返回
#t
? 环境是将变量与值关联的函数

所以在这个例子中,我们将
x=1
y=#f
关联起来,对吗

谢谢。

在scheme中,
#t
表示布尔值为true,
#f
表示false。我不完全理解其余的内容,但我建议DrRacket的调试器看看发生了什么

#lang eopl

(define-datatype env env?
  (empty-env)
  (extended-env (var symbol?)
                (val scheme-val?)
                (envi env?)))

(define (scheme-val? x) #t)

; examples
(define e-env (empty-env))
(define e1 (extended-env 'x 1 (extended-env 'y #f e-env)))
e-env
指定为
空env

(define e-env (empty-env))
定义一个匿名函数,该函数接受一个参数
x
,如果它是
scheme val
(在本例中为任意值),则返回
#t

运行此代码后,
e1
的结果为:

(define (scheme-val? x) #t)
因此,
e1
是一个
扩展环境,var='x,val=1,envi=(扩展环境,var='y,val=#f,envi=e-env)

(我认为)

在scheme中,
#t
表示布尔真,
#f
表示假。我不完全理解其余的内容,但我建议DrRacket的调试器看看发生了什么

#lang eopl

(define-datatype env env?
  (empty-env)
  (extended-env (var symbol?)
                (val scheme-val?)
                (envi env?)))

(define (scheme-val? x) #t)

; examples
(define e-env (empty-env))
(define e1 (extended-env 'x 1 (extended-env 'y #f e-env)))
e-env
指定为
空env

(define e-env (empty-env))
定义一个匿名函数,该函数接受一个参数
x
,如果它是
scheme val
(在本例中为任意值),则返回
#t

运行此代码后,
e1
的结果为:

(define (scheme-val? x) #t)
因此,
e1
是一个
扩展环境,var='x,val=1,envi=(扩展环境,var='y,val=#f,envi=e-env)


(我认为)

scheme val?
是一个函数,如果传递给它的值属于该类型(在本例中为“scheme val”),则应该返回
#t
(true)。就像
symbol?
为符号返回true,为其他所有对象返回false一样,
scheme-val?
将为scheme-val的任何对象返回true

事实证明,在这种情况下,
scheme-val?
对所有内容都返回true,因此所有内容都是scheme-val。
x
之所以存在,是因为谓词必须接受单个参数,它只是忽略参数,并对所有内容返回
#t

在这种情况下,这一点很重要,因为您会注意到
定义数据类型
,它需要一个值和一个谓词来检查其类型(
env
是值,
env?
是谓词)


显然,
extended env
也使用类似的子句。在这种情况下,其中三个是:
var
,它是一个
符号?
val
,它是一个
scheme val?
env
,它是一个
env?

scheme val?
是一个函数,如果传递给它的值是该类型(在这种情况下,是一个“scheme val”)。就像
symbol?
为符号返回true,为其他所有对象返回false一样,
scheme val?
将为scheme-val的任何对象返回true

事实证明,在这种情况下,
scheme-val?
对所有内容都返回true,因此所有内容都是scheme-val。
x
之所以存在,是因为谓词必须接受单个参数,它只是忽略参数,并对所有内容返回
#t

在这种情况下,这一点很重要,因为您会注意到
定义数据类型
,它需要一个值和一个谓词来检查其类型(
env
是值,
env?
是谓词)


显然,
extended env
也使用类似的子句。在这种情况下,其中三个子句:
var
,它是
符号?
val
,它是
scheme val?
env
,这是
env?

非常感谢。谓词
scheme val
使用
x
,但是在中de>env
,它是以这种形式编写的
var scheme val?
,所以我猜当我们点击
define datatype
时,scheme知道将谓词左侧的变量作为谓词的参数。这正确吗?不要将
define datatype
define
混淆。在
env
定义中,具体而言,
extended env
定义,
val
是一个
scheme val
。此
scheme val?
操作由
(define(scheme val?x)#t)定义
函数,它为任何参数
x
返回true。这只是语法。谢谢。但是当我们编写
val scheme val?
时,参数x在哪里?是
val
传递到
scheme val
?换句话说,scheme解释器很聪明地注意到,因为这是
数据类型,所以变量左边是作为参数传递的?我希望这能澄清我的问题。谢谢。非常感谢。谓词
scheme val
采用
x
,但在
env
中,它是以这种形式写的
var scheme val?
,所以我猜当我们点击
define datatype
时,scheme知道将变量扔到左边of谓词作为谓词的参数。是否正确?不要将
define datatype
define
混淆。在
env
定义中,特别是
extended env
定义中,
val
是一个
scheme val
。此
scheme val?
操作由
定义(define>)(方案val?x)#t)
函数,它为任何参数
x
返回true。这只是语法。谢谢。但是当我们编写
val scheme val?
时,参数x在哪里?是
val
传递到
scheme val
?换句话说,scheme解释器很聪明地注意到,因为这是
数据类型,所以变量左边是作为参数传递的?我希望这能澄清我的问题。谢谢。非常好:)谢谢。部分
返回true对所有事情都是非常有帮助的