【问题标题】:Racket - Filter even and odd integers into two separate listsRacket - 将偶数和奇数过滤到两个单独的列表中
【发布时间】:2017-10-03 00:24:27
【问题描述】:

函数应该接受一个整数列表并返回一个包含两个子列表的列表——第一个包含原始列表中的偶数,第二个包含奇数。我的代码完成了工作,但如果我用一个负整数测试它,例如第二个测试中的 -5,它就会被我的代码忽略。关于如何修复的任何想法?

(旁注 - 我知道有偶数、奇数等函数,但对于这个任务,我将自己创建它们。)

(define (segregate lst)
  (list(pullEven lst)(pullOdd lst)))

(define (pullEven lst)
    (if (empty? lst)
         '()
    (if (isEven (first lst))
     (cons (first lst) (pullEven (rest lst)))
     (pullEven (rest lst)))))

(define (pullOdd lst)
    (if (empty? lst)
         '()
    (if (isOdd (first lst))
     (cons (first lst) (pullOdd (rest lst)))
     (pullOdd (rest lst)))))

(define (isEven x)
  (if (equal? (remainder x 2) 0) #t #f)
  )
(define (isOdd x)
  (if (equal? (remainder x 2) 1) #t #f)
  )

;tests
"---------------------------------------------"
"Segregate Tests"
(segregate '(7 2 3 5 8)) 
(segregate '(3 -5 8 16 99))
(segregate '())
"---------------------------------------------"

【问题讨论】:

标签: lisp racket


【解决方案1】:

尝试用modulo 代替remainder

余数将保留答案的符号(余数 -1 与您正在检查的 1 的值不匹配)。

模返回与分母符号相同的答案。

【讨论】:

  • 根据@rsm 的回答,我在 if 语句中添加了更多逻辑——这很有效,但将“余数”切换为“模数”是最简洁的想法。谢谢大家。
猜你喜欢
  • 1970-01-01
  • 2021-12-11
  • 2021-05-20
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 2012-07-26
  • 1970-01-01
相关资源
最近更新 更多