2016-03-07 38 views
0

我发现列表的最大值,现在我想返回数字,除了所有具有MAX值的模数等于零的数字,我不太清楚如何使用整个列表以获得我需要的任何人都可以引导我这个方向是正确的号码上模运算符是我迄今为止在列表上使用模运算符的方案

(define (findlargest a_list) 
(if (null? a_list) ;if its a empty list 
    #f    ;its false 
    (let loop ((a_list (cdr a_list)) ;binds the loop variable a_list to value of cdr a_list(second and all subsequent items in a list) 
       (maxval (car a_list))) ;maxval is set to car of a_list (first item of the list) 
     (cond ((null? a_list) maxval) ;if the list is empty return max 
      ((> (car a_list) maxval) ;checks to see if the current element > max 
      (loop (cdr a_list) (car a_list))) ;find a new max 
      (else 
     (loop (cdr a_list) maxval)));keeps the same max 

回答

1

你重塑与findlargest轮子,有一个为一个built-in procedure

(define (findlargest lst) 
    (apply max lst)) 

现在,关于您的questi上 - 这看起来像filter一个完美的工作:

(define (filter-max-modulo lst) 
    (let ((max-val (findlargest lst))) 
    (filter (lambda (val) 
       (not (zero? (modulo val max-val)))) 
      lst))) 

例如:

(filter-max-modulo '(0 -2 -4 -3 -7 -1 2)) 
=> '(-3 -7 -1)