Scheme中的真值
方案标准中是否定义了真值的含义?或者方案评估者的实施者是否可以选择将其定义为:Scheme中的真值,scheme,lisp,Scheme,Lisp,方案标准中是否定义了真值的含义?或者方案评估者的实施者是否可以选择将其定义为: (define(true?x)(eq?x#t))?您可以定义这样一个函数,但最好使用 (define (true? x) (not (eq? x #f))) 这与所有内置条件操作的逻辑相匹配。如第3.2节所述: 虽然有一个单独的布尔类型,但任何方案 值可以用作布尔值,用于 条件测验。如第6.3节所述,所有值 在此类测试中,除#f外,均为真 #t是仅需要布尔值时返回的规范真值。方案标准是否定义真值的含义? 是的,
(define(true?x)(eq?x#t))
?您可以定义这样一个函数,但最好使用
(define (true? x)
(not (eq? x #f)))
这与所有内置条件操作的逻辑相匹配。如第3.2节所述:
虽然有一个单独的布尔类型,但任何方案
值可以用作布尔值,用于
条件测验。如第6.3节所述,所有值
在此类测试中,除#f
外,均为真
#t
是仅需要布尔值时返回的规范真值。方案标准是否定义真值的含义?
是的,“真”的含义在Scheme中有很好的定义
有许多方案标准,但在所有这些标准中只有两个布尔对象;它们具有外部表示法#t
和#f
。R7RS还要求布尔对象具有可选的外部表示形式#true
和#false
。但是,在条件测试中,除了#f
(对于R7RS,则#false
)之外,所有值均为真。其他Lisp,尤其是Common Lisp,可能有不同的真实性概念
在所有标准方案值中,只有#f
在
条件表达式。除了#f
,所有标准方案值,
包括#t
、对、空列表、符号、数字、字符串、,
向量和过程都算作true
尽管存在单独的布尔类型,但任何方案值都可以
在条件测试中用作布尔值。在一个
条件测试,在此类测试中,除
#f
。本报告使用“真”一词表示除#f
之外的任何方案值,使用“假”一词表示#f
R7RS 6.3布尔值:
true和false的标准布尔对象写为#t
和
#f
。或者,它们可以写成#true
和
分别为#false。然而,真正重要的是模式条件表达式(if
,cond
,和
,或
,当
时)所表示的对象,
除非
,不
)视为正确或错误
在所有方案值中,只有#f
在条件值中计为false
表达。所有其他方案值,包括#t
,均视为真
实现是否可以对True使用不同的定义?
还是方案评估者的实施者可以选择
定义为:(定义(真x)(等式x#t))
任何方案标准中都没有定义true?
谓词。在最常见的真/假值用例中,例如,在条件表达式中,OP示例中定义的此类谓词会产生误导:
>(定义(真x)(等式x#t))
>(真的?’())
#f
>(如“()
“是吗?我不希望这样”
“真的?这是我的期望”)
“是吗?我不希望这样”
上面的过程测试一个值是否为布尔值#t
,但不测试它是否为真。任何未将所有非#f
值(包括#t
)视为真的实现都不是符合方案要求的实现。使用true?
的OP定义来确定实现中“true”的含义的实现将是不合格的
可以定义true?
如下:
>(定义(真?x)(非(非x)))
>(真的?’())
#t
>(对吗?#t)
#t
>(对吗?#f)
#f
这将回答值在条件表达式中测试为true还是false的问题
请注意,Scheme中还有一个布尔?
谓词,用于测试值是否为布尔值:
>(对吗?#t)
#t
>(布尔?#t)
#t
>(对吗?0)
#t
>(布尔值?0)
#f
>(对吗?#f)
#f
>(布尔?#f)
#t
我对的读数表明真值定义为#t
。虽然你当然可以定义true
来表示相同的东西,但它是非标准的,并且规范不支持将#t
重新定义为其他东西(或不允许)。Scheme中没有true?
函数。@Barmar:编写一个很容易,如OP所示。请注意,除#f
以外的任何值都被所有条件操作视为true。(define(true?x)(eq?x#t))
定义了一个过程。这是一种价值,但不是真的;我们必须调用它来测试一个对象是否为真。表示可能不同,但它们的使用方式应该相同。实际数据。例如,元循环计算器可以将整数实现为列表(列表的长度是值),而底层实现可以使用硬件整数。在编写元循环计算器时,可以选择直接使用底层实现的多少,与您在评估器中定义的部分相比。哦,好的,谢谢。但是您如何更改真值的表示?