我需要检查给定的数字列表(所有这些数字)是否可以被4整除。
(divisible4 '(4,12,20))
#t
(divisible4 '(12 5 13))
#f我写了这个,但它没有返回#f。
(define (div2? list)
(if (= (modulo (car list) 4) 0)
#t
(div2? cdr list)))发布于 2017-03-24 16:49:59
一种简单的方法是使用内置的方法,例如andmap,它检查一个条件对于列表中的所有元素是否有效:
(define (divisible4 lst)
(andmap (lambda (e) (zero? (modulo e 4)))
lst))我们可以手工完成同样的过程,尽管不那么优雅:
(define (divisible4 lst)
(if (null? lst)
#t
(and (zero? (modulo (car lst) 4))
(divisible4 (cdr lst)))))相当于:
(define (divisible4 lst)
(or (null? lst)
(and (zero? (modulo (car lst) 4))
(divisible4 (cdr lst)))))无论如何,它的工作方式与预期的一样:
(divisible4 '(4 12 20))
=> #t
(divisible4 '(12 5 13))
=> #f发布于 2017-03-25 11:30:27
命名的let递归可能更容易理解:
(define (div4 L)
(let loop ((ll L)) ; set up recursion and initial value;
(cond
[(empty? ll) #t] ; if full list tested, return true;
[(not(= 0 (modulo (car ll) 4))) #f] ; if first item is not divisible, return false;
[else (loop (rest ll))] ; else goto rest of list;
)))https://stackoverflow.com/questions/43004885
复制相似问题