首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查给定列表是否可被方案中的4整除

如何检查给定列表是否可被方案中的4整除
EN

Stack Overflow用户
提问于 2017-03-24 16:42:55
回答 2查看 989关注 0票数 0

我需要检查给定的数字列表(所有这些数字)是否可以被4整除。

代码语言:javascript
复制
(divisible4 '(4,12,20))
#t

(divisible4 '(12 5 13))
#f

我写了这个,但它没有返回#f。

代码语言:javascript
复制
(define (div2? list)
  (if (= (modulo (car list) 4) 0)
      #t
      (div2? cdr list)))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-24 16:49:59

一种简单的方法是使用内置的方法,例如andmap,它检查一个条件对于列表中的所有元素是否有效:

代码语言:javascript
复制
(define (divisible4 lst)
  (andmap (lambda (e) (zero? (modulo e 4)))
          lst))

我们可以手工完成同样的过程,尽管不那么优雅:

代码语言:javascript
复制
(define (divisible4 lst)
  (if (null? lst)
      #t
      (and (zero? (modulo (car lst) 4))
           (divisible4 (cdr lst)))))

相当于:

代码语言:javascript
复制
(define (divisible4 lst)
  (or (null? lst)
      (and (zero? (modulo (car lst) 4))
           (divisible4 (cdr lst)))))

无论如何,它的工作方式与预期的一样:

代码语言:javascript
复制
(divisible4 '(4 12 20))
=> #t
(divisible4 '(12 5 13))
=> #f
票数 1
EN

Stack Overflow用户

发布于 2017-03-25 11:30:27

命名的let递归可能更容易理解:

代码语言:javascript
复制
(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;
      )))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43004885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档