【问题标题】:Is there any way to make a lat using cons in scheme?有没有办法在方案中使用 cons 来制作 lat?
【发布时间】:2016-12-09 17:44:27
【问题描述】:

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

#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。

【问题讨论】:

    标签: scheme racket nested-lists


    【解决方案1】:

    使用(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))
    

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

    【讨论】:

      【解决方案2】:

      已经找到答案了:

       (define (flatten x)
          (cond ((null? x) '())
                ((not (pair? x)) (list x))
                (else (append (flatten (car x))
                              (flatten (cdr x))))))
      

      【讨论】:

        猜你喜欢
        • 2020-11-25
        • 1970-01-01
        • 2015-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-13
        • 2022-12-22
        相关资源
        最近更新 更多