使用高阶函数而不是递归

如果存在表示右递归模式的更高阶函数,则通常的做法是使用更高阶函数而不是递归。在我们的例子中,sum-of-numbers 可以使用 foldl 定义:

#lang racket
(define (sum-of-numbers l)
  (foldl + 0 l))
(sum-of-numbers '(1 2 3 4 5)) ;; => 15

可以直接在列表中调用 foldl

#lang racket
(foldl + 0 '(1 2 3 4 5)) ;; => 15