球拍定义清单

时间:2019-06-14 18:55:10

标签: functional-programming scheme racket

我必须使用语言球拍解决嵌套任务。通过给定的列表,我必须创建一个新列表,仅包含除以10的元素而没有剩余的元素。

到目前为止,我的代码:

(define (brel x sp)
   (cond ((null? sp) 0)
         (( = (remainder (car sp) 10) 0) (car sp))
         (else (brel x (cdr sp)))))

(define (spbr L)
  (define (f l1)
    (if (null? l1) '()
     (cons (brel (car l1) L) (f (cdr l1)))))
 (f L))
(spbr (list 50 5 3))

给定代码当前计算第一个列表中元素的每个重复并将它们添加到新列表中。我必须更改什么才能使其起作用?

1 个答案:

答案 0 :(得分:1)

您不需要帮助程序,只需建立一个仅包含满足条件的项目的新列表即可:

(define (spbr L)
  (cond ((null? L) '())
        ((= (remainder (car L) 10) 0)
         (cons (car L) (spbr (cdr L))))
        (else
         (spbr (cdr L)))))

使用filter过程更惯用:

(define (spbr L)
  (filter (lambda (e) (zero? (remainder e 10)))
          L))

无论哪种方式,它都能按预期工作:

(spbr '(50 5 3 70))
=> '(50 70)
相关问题