使用高阶函数而不是递归
如果存在表示右递归模式的更高阶函数,则通常的做法是使用更高阶函数而不是递归。在我们的例子中,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