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
,将不计算相同
条件下的以下条件。内部
条件是
(或..
条件主体的一部分。请参阅。