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)))))