我学习过编程语言课程,幻灯片中有这个 Scheme 代码的变体:
; (listof any) -> (listof any[no-cons])
(define (remove-pairs l)
(cond
[(empty? l) '()]
[else
(let ([ans
(if (cons? (first l))
(begin (free! (first l))
(remove-pairs (rest l)))
(cons (first l)
(remove-pairs (rest l))))])
(free! l) ; <- this will break our tail recursion.
ans)]))
在代码中,(free! l)
会破坏我们的尾递归。我不知道这个功能是做什么的,我无法理解。