프로시저를 보통의 데이터처럼 사용하는 프로시저를 차수 높은 프로시저(higher-order procedure)라고 한다.
아래 두 프로시저를 살펴보자.
a와 b 사이의 값을 모두 더하는 프로시저
(define (sum-integers a b)
(if (> a b)
0
(+ a (sum-integers (+ a 1) b))))
a와 b 사이의 값을 세제곱하여 모두 더하는 프로시저
(define (sum-cubes a b)
(if (> a b)
0
(+ (cube a) (sum-cubes (+ a 1) b))))
두 프로시저는 비슷한 부분이 많이 있는 것을 알 수 있다. a, b, 함수의 이름(name), 다음 a를 구하는 식(next), 더해지는 방법(term) 이다.
(define (name term a next b)
(if (> a b)
0
(+ (term a) (name (next a) b))))
위와 같이 두 프로시저를 다시 프로시저를 인자로 받는 방식으로 만들어보자.
(define (identity x) x)
(define (inc x) (+ x 1))
(define (sum-integers a b)
(sum identity a inc b)) // name = sum, term = identity, next = inc
(define (cube x) (* x x x))
(define (inc x) (+ x 1))
(define (sum-cubes a b)
(sum cube a inc b)) // name = sum, term = cube, next = inc
프로시저를 인자로 사용함으로써 차수 높은 프로시저를 통해 간단하게 프로시저를 요약할 수 있음을 알 수 있다.