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

问题描述 投票:1回答:3

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

 (define test
    (lambda (list)
      (map (lambda (x) (if (> x 0) x ))list)))
list scheme lisp racket
3个回答
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
投票

我把列表的底片变为0,所以它不会影响我的作品。

这是它的代码:

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

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)))))
© www.soinside.com 2019 - 2024. All rights reserved.