현재 Hailperin, Kaiser 및 Knight의 Scheme "Concrete Abstractions"책을 통해 작업하고 있습니다. 아래에 표시된 동일한 알고리즘의 반복적 인 버전과 반복적 인 버전을 작성했습니다. 이 알고리즘은 수량 또는 일 n 번 작업을 수행하는 데 사용됩니다. 그래서, 일반적으로 함께 - 사본 - of (operation n thing). 예를 들어, 나는 (3 * 3) 또는 (3 * 2)의 3 제곱을 같이 3 등분하여 찾을 수 있습니다.대수 시간 체계 알고리즘
재귀 버전 :
(define together-copies-of-linrec
(lambda (combine quantity thing)
(define together-iter
(lambda (combine start thing)
(if (= start quantity)
thing
(combine (together-iter combine (+ start 1) thing)
thing))))
(together-iter combine 1 thing)))
반복 버전 :
(define together-copies-of-linit
(lambda (combine quantity thing)
(define together-iter
(lambda (combine start newthing)
(if (= start quantity)
newthing
(together-iter combine (+ start 1) (combine newthing thing)))))
(together-iter combine 1 thing)))
지금, 나는이 알고리즘의 대수 시간 버전을 작성해야하지만, 난 정말 어디서부터 시작 해야할지하지 않습니다. 이 경우 로그 타임으로 만들기 위해 인스턴스 당 작업을 줄일 수있는 방법을 알지 못합니다. combine
이 0 referentially 투명하게 보장된다고 가정