Scheme 什么';我的递归过程出了什么问题?

Scheme 什么';我的递归过程出了什么问题?,scheme,Scheme,这个过程接收一个布尔值列表,如果它看到一个false,它应该终止并返回false。不管它的运行方式如何,它总是正确的 (define L3 (cons true (cons false empty))) (check-expect (all-true? L3) false) (define (all-true? lob) (cond [(empty? lob) true] [else (if (boolean? (first lob))

这个过程接收一个布尔值列表,如果它看到一个false,它应该终止并返回false。不管它的运行方式如何,它总是正确的

(define L3 (cons true (cons false empty)))

(check-expect (all-true? L3) false)


(define (all-true? lob)
  (cond [(empty? lob) true]
        [else 
         (if (boolean? (first lob))
         (all-true? (rest lob))
         false)]))

我知道我也可以在else语句之后使用AND子句。

这应该可以解决问题:

(define (all-true? lob)
  (cond [(empty? lob) true]
        [(first lob) (all-true? (rest lob))]
        [else false]))
说明:

  • 如果我们有几个嵌套条件,只需将它们放在
    cond
    中的不同分支中,而不是在
    else
    中的
    If
    部分写入
    cond
  • 我们不想调用
    布尔值?
    ,这是为了检查一个值是否为布尔值,而不是为了确定它是否为真
  • 假设过程首先收到一个布尔值列表,那么测试第一个元素是否为true就足以继续递归
或者,在球拍中,我们可以使用相同的效果:

(define (all-true? lob)
  (andmap identity lob))
在其他口译员中,我们可以从SRFI-1导入:

(require srfi/1)
(define (all-true? lob)
  (every (lambda (x) x) lob))

这将解决以下问题:

(define (all-true? lob)
  (cond [(empty? lob) true]
        [(first lob) (all-true? (rest lob))]
        [else false]))
说明:

  • 如果我们有几个嵌套条件,只需将它们放在
    cond
    中的不同分支中,而不是在
    else
    中的
    If
    部分写入
    cond
  • 我们不想调用
    布尔值?
    ,这是为了检查一个值是否为布尔值,而不是为了确定它是否为真
  • 假设过程首先收到一个布尔值列表,那么测试第一个元素是否为true就足以继续递归
或者,在球拍中,我们可以使用相同的效果:

(define (all-true? lob)
  (andmap identity lob))
在其他口译员中,我们可以从SRFI-1导入:

(require srfi/1)
(define (all-true? lob)
  (every (lambda (x) x) lob))

这将解决以下问题:

(define (all-true? lob)
  (cond [(empty? lob) true]
        [(first lob) (all-true? (rest lob))]
        [else false]))
说明:

  • 如果我们有几个嵌套条件,只需将它们放在
    cond
    中的不同分支中,而不是在
    else
    中的
    If
    部分写入
    cond
  • 我们不想调用
    布尔值?
    ,这是为了检查一个值是否为布尔值,而不是为了确定它是否为真
  • 假设过程首先收到一个布尔值列表,那么测试第一个元素是否为true就足以继续递归
或者,在球拍中,我们可以使用相同的效果:

(define (all-true? lob)
  (andmap identity lob))
在其他口译员中,我们可以从SRFI-1导入:

(require srfi/1)
(define (all-true? lob)
  (every (lambda (x) x) lob))

这将解决以下问题:

(define (all-true? lob)
  (cond [(empty? lob) true]
        [(first lob) (all-true? (rest lob))]
        [else false]))
说明:

  • 如果我们有几个嵌套条件,只需将它们放在
    cond
    中的不同分支中,而不是在
    else
    中的
    If
    部分写入
    cond
  • 我们不想调用
    布尔值?
    ,这是为了检查一个值是否为布尔值,而不是为了确定它是否为真
  • 假设过程首先收到一个布尔值列表,那么测试第一个元素是否为true就足以继续递归
或者,在球拍中,我们可以使用相同的效果:

(define (all-true? lob)
  (andmap identity lob))
在其他口译员中,我们可以从SRFI-1导入:

(require srfi/1)
(define (all-true? lob)
  (every (lambda (x) x) lob))

不要介意。应该使用eq吗?而不是布尔?。布尔值?false返回true。不,不要使用
eq?
。直接使用
(第一个lob)
的结果即可。快捷方式:
(定义(全部为真?lob)(或(空?lob)(和(第一个lob)(全部为真?(cdr lob);)
哦,是的,关于你的问题:你永远不会测试
(第一个lob)
是否为真。您只需测试它是否具有boolean类型(因此它仍然可以是true或false)。没关系。应该使用eq吗?而不是布尔?。布尔值?false返回true。不,不要使用
eq?
。直接使用
(第一个lob)
的结果即可。快捷方式:
(定义(全部为真?lob)(或(空?lob)(和(第一个lob)(全部为真?(cdr lob);)
哦,是的,关于你的问题:你永远不会测试
(第一个lob)
是否为真。您只需测试它是否具有boolean类型(因此它仍然可以是true或false)。没关系。应该使用eq吗?而不是布尔?。布尔值?false返回true。不,不要使用
eq?
。直接使用
(第一个lob)
的结果即可。快捷方式:
(定义(全部为真?lob)(或(空?lob)(和(第一个lob)(全部为真?(cdr lob);)
哦,是的,关于你的问题:你永远不会测试
(第一个lob)
是否为真。您只需测试它是否具有boolean类型(因此它仍然可以是true或false)。没关系。应该使用eq吗?而不是布尔?。布尔值?false返回true。不,不要使用
eq?
。直接使用
(第一个lob)
的结果即可。快捷方式:
(定义(全部为真?lob)(或(空?lob)(和(第一个lob)(全部为真?(cdr lob);)
哦,是的,关于你的问题:你永远不会测试
(第一个lob)
是否为真。您只需测试它是否具有boolean类型(因此它仍然可以是true或false)。