Return 在 Racket \ Scheme 中输入

Return types in Racket \ Scheme

我是 Scheme 的新手,我想知道如何从我作为作业编写的递归函数中整理 returned 值。该函数只是按照从最低值到最高值的顺序打印出 BST。我的问题有点迂腐,但我很好奇。该函数的输出是一个数字列表,但递归实现导致一个空列表在最后被 returned。即 8 16 20 '()。有没有一种简单的方法可以只 return 数字列表并省略空列表?我可以想出几种方法;构建一个新的列表或字符串并在最后 returning ,但它会为这样一个简单的任务增加相当多的开销。有没有更简单的方法来实现这个结果?谢谢

注意:作业已经完成,此时我应该是满分,所以不是作业题。

#lang racket

(define (show lst)

  (cond
    [(null? (cadr lst))
     '()]

    ; recur smaller tree
    [(< (car lst) (caaddr lst))
     (show (cadr lst))
     ])

  ; print cur node
  (writeln (car lst))

  (cond
    [(null? (cadr lst))
     '()]

    ; recur larger tree
    [(show (caddr lst))])

)

(show '(16 (8 (2 () ()) (10 () ())) (20 (18 () ()) (30 () ()))))

您可以在代码中将 '() 替换为 (void),因为 REPL 不会打印此值。或者完全避免给出 return 值:

(define (show lst)
  (unless (null? (cadr lst))
    (when (< (car lst) (caaddr lst))
      (show (cadr lst))))
  (writeln (car lst))
  (unless (null? (cadr lst))
    (show (caddr lst))))