如何设计一个带有两个布尔参数的函数,如果其中一个(或两个)参数为真,则 returns 为真?
How to design a function that takes two Boolean parameters and returns true if either (or both) of the parameters are true?
;布尔 b1 b2:
;#true & #true => #true
;#true & #false => #true
;#false & #false => #false
我知道它是如何工作的,但我不知道如何在 Racket 中编写它。我应该在一个函数中有两个参数,但是我怎么能在 Racket 中写呢?它应该像
这样开始吗
(定义(要么是真的?b1 b2)
())
(定义(either-true?b1 b2)
(如果 b1 #t b2))
还要确保您拥有这两个 check-expects:
(check-expect (either-true?#t #f) #t)
(check-expect (either-true?#f #t) #t)
祝大家好运 1 哈哈
您的 either-true?
已经存在于 Racket 中,名为 or
。
(define (either-true? b1 b2) (or b1 b2))
或者直接做:
(define either-true? or)
显示 either-true?
的正文可能只是
(or b1 b2)
或 (if b1 #t b2)
(甚至 (if b2 #t b1)
)
either-true?
的“目的”的字面实现可以是:
(define (either-true? b1 b2) ;; Boolean Boolean -> Boolean
;; produce #t if either b1 or b2 is true, otherwise #f
(cond
[ b1 #t ]
[ b2 #t ]
[else #f ]))
在 Racket 学生语言中,条件形式(if
、cond
、or
等)要求他们
“question-expressions”为布尔值(#t
或 #f
)。其他球拍语言使用
Scheme interpretation of any non-#f
value as true
在条件上下文中。
因此,使用对“真实性”的这种解释的另一个定义可能是:
#lang racket
(define (either-true? b1 b2) ;; Any Any -> Any
;; produce #f if both b1 and b2 #f, otherwise a truthy value
(findf values (list b1 b2)))
值得注意的是,虽然 (either-true? b1 b2)
看起来像 (or b1 b2)
,但
是一个显着差异:如果 b1 为真,or
将不会评估 b2; either-true?
一直
计算两个参数。可以看出区别运行:
#lang racket
(require math/number-theory)
(define (either-true? b1 b2)
(or b1 b2))
(time (or (prime? 7) (prime? (next-prime (expt 2 1000)))))
(time (either-true? (prime? 7) (prime? (next-prime (expt 2 1000)))))
;布尔 b1 b2:
;#true & #true => #true
;#true & #false => #true
;#false & #false => #false
我知道它是如何工作的,但我不知道如何在 Racket 中编写它。我应该在一个函数中有两个参数,但是我怎么能在 Racket 中写呢?它应该像
这样开始吗(定义(要么是真的?b1 b2)
())
(定义(either-true?b1 b2) (如果 b1 #t b2))
还要确保您拥有这两个 check-expects: (check-expect (either-true?#t #f) #t) (check-expect (either-true?#f #t) #t)
祝大家好运 1 哈哈
您的 either-true?
已经存在于 Racket 中,名为 or
。
(define (either-true? b1 b2) (or b1 b2))
或者直接做:
(define either-true? or)
either-true?
的正文可能只是
(or b1 b2)
或 (if b1 #t b2)
(甚至 (if b2 #t b1)
)
either-true?
的“目的”的字面实现可以是:
(define (either-true? b1 b2) ;; Boolean Boolean -> Boolean
;; produce #t if either b1 or b2 is true, otherwise #f
(cond
[ b1 #t ]
[ b2 #t ]
[else #f ]))
在 Racket 学生语言中,条件形式(if
、cond
、or
等)要求他们
“question-expressions”为布尔值(#t
或 #f
)。其他球拍语言使用
Scheme interpretation of any non-#f
value as true
在条件上下文中。
因此,使用对“真实性”的这种解释的另一个定义可能是:
#lang racket
(define (either-true? b1 b2) ;; Any Any -> Any
;; produce #f if both b1 and b2 #f, otherwise a truthy value
(findf values (list b1 b2)))
值得注意的是,虽然 (either-true? b1 b2)
看起来像 (or b1 b2)
,但
是一个显着差异:如果 b1 为真,or
将不会评估 b2; either-true?
一直
计算两个参数。可以看出区别运行:
#lang racket
(require math/number-theory)
(define (either-true? b1 b2)
(or b1 b2))
(time (or (prime? 7) (prime? (next-prime (expt 2 1000)))))
(time (either-true? (prime? 7) (prime? (next-prime (expt 2 1000)))))