Recursion 布尔格式中的递归

Recursion 布尔格式中的递归,recursion,scheme,boolean,Recursion,Scheme,Boolean,如何为同样是布尔函数的递归函数编写基本情况?这个问题出现在简单方案()中的扑克手计分项目中 我能想到的唯一一件事是,当列表的计数达到1或更少时,放入#t,但是函数只返回#t,因为所有列表都将减少为其中的一个元素。通常这取决于函数应该执行的操作。例如,检查列表中的每个元素是否满足某个谓词的every?函数应该在基本情况下返回#t,因为空列表中的每个元素确实满足谓词。另一方面,some?函数应该返回#f,因为空列表中的某些元素满足谓词是错误的 (define (some? predicate lis

如何为同样是布尔函数的递归函数编写基本情况?这个问题出现在简单方案()中的扑克手计分项目中


我能想到的唯一一件事是,当列表的计数达到1或更少时,放入
#t
,但是函数只返回
#t
,因为所有列表都将减少为其中的一个元素。

通常这取决于函数应该执行的操作。例如,检查列表中的每个元素是否满足某个谓词的
every?
函数应该在基本情况下返回
#t
,因为空列表中的每个元素确实满足谓词。另一方面,
some?
函数应该返回
#f
,因为空列表中的某些元素满足谓词是错误的

(define (some? predicate list)
  (if (null? list)
      #f
      (if (predicate (car list))
          #t
          (some? predicate (cdr list)))))
当然,如果函数返回这样的布尔值,通常可以通过使用
而不是
对逻辑进行更直接的编码:

(define (some? predicate list)
  (and (not (null? list))
       (or (predicate (car list))
           (some? predicate (cdr list)))))
每种情况都是:

(define (every? predicate list)
  (if (null? list)
      #t
      (if (not (predicate (car list)))
          #f
          (every? predicate (cdr list)))))
以及更直接的
every?
(使用布尔运算符而不是
if
#t
#f
):


您需要在一些代码中进行编辑,以便我们理解您所说的
count
是什么意思。
(define (every? predicate list)
  (or (null? list)
      (and (predicate (car list))
           (every? predicate (cdr list)))))