如何在方案列表中使用特定范围的数字?

时间:2017-12-19 09:54:48

标签: list scheme lisp racket

我正在学习计划,我想知道如何删除,例如列表的负数,以便我可以使用积极因素,直到现在我只有#而不是删除否定。 这是我的代码:

 (define test
    (lambda (list)
      (map (lambda (x) (if (> x 0) x ))list)))

3 个答案:

答案 0 :(得分:2)

以下是filter的标准版本:

(define (filter pred? xs)
  (let loop ((xs xs) (ys '()))
    (cond ((null? xs) (reverse ys))
          ((pred? (car xs))
            (loop (cdr xs) (cons (car xs) ys)))
          (else (loop (cdr xs) ys)))))

使用它,您可以构建一个仅包含输入列表正值的新列表:

> (filter positive? '(3 9 -2 4 0 -1 7))
(3 9 4 7)

您可能会喜欢my blog,它提供了许多用于学习的Scheme代码。

答案 1 :(得分:1)

我将列表的底片变为0,因此不会影响我的操作。

以下是代码:

 (define test
   (lambda(list)
        (map (lambda (x)(if (> x  0) x
                    0 ))list)  ) )

答案 2 :(得分:1)

您需要按元素分析和重建list元素。这是Scheme中非常常见的递归模式,应在课程材料中深入介绍。

(define (filter list pred)
  (cond ((null? list)
          '())
        ((pred (car list))
          (filter (cdr list) pred))
        (else
          (cons (car list) (filter (cdr list) pred)))))