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))))
我是 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))))