我找到了列表的最大值,现在我想要返回数字,除了所有具有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
答案 0 :(得分:1)
您正在使用findlargest
重新发明轮子,built-in procedure为此:
(define (findlargest lst)
(apply max lst))
现在,关于你的问题 - 这对于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)