传递布尔函数的正确方法
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
我想看看方案中的某些东西是否“真实”,我可以执行以下操作:
(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