Racket 球拍满足条件后退出条件声明
我有一个条件陈述,例如:Racket 球拍满足条件后退出条件声明,racket,Racket,我有一个条件陈述,例如: (cond [ (and (null? E1) (not (null? E2))) #f] [ (and (not (null? E1)) (null? E2)) #f] [ (or (= (length E1) 1) (= (length E2) 1)) (cond [ (equal? E1 E2) #t] [ (equal? (reverse E1) E2)
(cond
[ (and (null? E1) (not (null? E2))) #f]
[ (and (not (null? E1)) (null? E2)) #f]
[ (or (= (length E1) 1) (= (length E2) 1))
(cond
[ (equal? E1 E2) #t]
[ (equal? (reverse E1) E2) #t]
[ else #f break]
)]
[ .... conditions continue
在达到#f或#t之后,是否有退出cond语句的方法,而不是继续到底部,检查所有其他条件?就像在python中一样,有“break”来摆脱循环 嗯。。。如果我理解正确,那么你想要的行为就是内在的行为。下面是一个例子:
#lang racket
(define (my-fun E1 E2)
(cond
[(and (null? E1) (not (null? E2))) #f]
[(and (not (null? E1)) (null? E2)) #f]
[(or (= (length E1) 1) (= (length E2) 1))
(cond
[(equal? E1 E2) #t]
[(equal? (reverse E1) E2) #t]
[else #f])] ;; <-- the break was here.
[(dont-run-this-check) #t]
[(dont-run-this-check-either) #f]
[(really-really-dont-run-this-check) #t]))
(my-fun '(a b c) '(d))
(define (dont-run-this-check) (error))
(define (dont-run-this-check-either) (error))
(define (really-really-dont-run-this-check) (error))
#朗球拍
(定义(我的乐趣)
(续)
[(和(空?E1)(不是(空?E2)))#f]
[(和(非(null?E1))(null?E2))#f]
[(或(=(长度E1)1)(=(长度E2)1))
(续)
[(等于E1 E2)#t]
[(反向E1)E2)#t]
[else#f])];在cond
(cond
(predicate1 consequent1)
(predicate2 consequent2)
(else alternative))
这与:
(if predicate1
consequent1
(if predicate2
consequent2
alternative))
因此,如果谓词1匹配表达式,则结果1将是整个cond
表单的求值
如果嵌套cond
当嵌套cond的谓词匹配时,整个cond
的求值将是内部的求值
if
之间的另一个区别是,cond
可以有多个后续/可选表达式,因为它有显式的begin。。因此,您可以在需要的地方进行编码`
(cond ...
[else #f break])
这里,如果其他谓词不匹配,它将始终匹配else
。然后if将首先计算#f(这是多余的,因为它不会产生任何副作用)在它求值之前,它的值将是结果。为了澄清,我只需要在导致#t或#f的条件满足时才需要它中断。如果不满足,我仍然希望代码继续执行。o,仍然不清楚您要求什么。否则
的意思是
t始终都是这样r、 首先。如果控件到达行[else#f break]
,是否希望它继续到较低的子句并尝试更多条件?是或否,请澄清一点,在条件中,计算为#t
的第一个条件将阻止计算所有其他条件,因此如果(或(=(长度E1)1)(=(长度E2)1))
计算为#t
,将不计算相同条件下的以下条件。内部条件是(或..
条件主体的一部分。请参阅。