有什么办法可以在方案中使用 cons 来制作 lat 吗?
Is there any way to make a lat using cons in scheme?
我正在使用这段简单的代码构建一个数字列表:
#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)
scheme有什么办法吗?我正在使用 DrRacket。
已经找到答案:
(define (flatten x)
(cond ((null? x) '())
((not (pair? x)) (list x))
(else (append (flatten (car x))
(flatten (cdr x))))))
使用 (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))
将以正确的顺序为您提供元素。
我正在使用这段简单的代码构建一个数字列表:
#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)
scheme有什么办法吗?我正在使用 DrRacket。
已经找到答案:
(define (flatten x)
(cond ((null? x) '())
((not (pair? x)) (list x))
(else (append (flatten (car x))
(flatten (cdr x))))))
使用 (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))
将以正确的顺序为您提供元素。