我有一段简单的代码,构造了一个数字列表:

#lang scheme

(define pseudofizzbuzz (lambda (x)
             (cond
               ((zero? x) (quote ()))
               ((or (integer? (/ x 3)) (integer? (/ x 5))) (cons (quote ()) (pseudofizzbuzz (- x 1))))
               (else (cons x (pseudofizzbuzz (- x 1)))))))

(define reverselist (lambda (lat)
                  (cond
                    ((null? lat) (quote ()))
                    (else
                     (cons (reverselist (cdr lat)) (list (car lat)))))))


(reverselist (pseudofizzbuzz 10))


我得到的结果是:

 ((((((((((() 1) 2) ()) 4) ()) ()) 7) 8) ()) ())


但是我当然想要的是:

(1 2 4 7 8)


有什么办法可以做到这一点吗?我正在使用DrRacket。

最佳答案

使用(cons an-element a-list)用新元素a-list扩展an-element

#lang racket

(define pseudofizzbuzz
  (lambda (x)
    (cond
      ((zero? x)
       (quote ()))
      ((or (integer? (/ x 3)) (integer? (/ x 5)))
       (pseudofizzbuzz (- x 1)))
      (else
       (cons x (pseudofizzbuzz (- x 1)))))))

(define reverselist
  (lambda (lat)
    (cond
      ((null? lat)
       (quote ()))
      (else
       (cons (reverselist (cdr lat)) (list (car lat)))))))

(pseudofizzbuzz 10)


这会产生相反的结果,因此

(reverse (pseudofizzbuzz 10))


将按照正确的顺序为您提供元素。

09-06 20:58