传递布尔函数的正确方法

Proper way to pass a boolean function

我想看看方案中的某些东西是否“真实”,我可以执行以下操作:

(lambda (x) (= x #t)))

但是,这给了我一些错误,我回过头来使用类似下面的方法(目前):

(lambda (x) x)

在类似于 python 的方案中,什么最接近 isTrue 函数:

>>> bool(1)
True
>>> bool(0)
False

此外,为什么像 (= 4 #t) 这样的操作不起作用? = 是否仅适用于方案中的数字类型?

为了在 Racket 中测试某些东西是否是 false,我们有 false? 谓词,但奇怪的是我们没有 true? 谓词 - 虽然实现起来很容易:

(define (true? exp)
  (not (false? exp)))

如果您想知道,在 Scheme 中 只有 false 值是 #f,其他一切都被认为是真实的。你是对的,= 过程专门用于数字;如果您需要更一般的相等性比较,只需使用 equals?。这现在有效:

(equal? 4 #t)
=> #f

显然 4 不等于 #t,但无论如何 4(或与此相关的任何其他数字)被认为是 真实的 :

(if 4 'ok 'nope)
=> 'ok