私はプログラミング言語コースを勉強しました.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)
は、末尾の再帰を中断します。この関数が何をするのかわかりません。意味がわかりません。