guile용 range 함수

컴퓨터 2006. 2. 2. 15:00
Python의 range 함수를 guile용으로 흉내내어 봤다.
다른 Scheme 컴파일러에서 제대로 돌아가는지는 모른다. 아마도 가변인자 부분을 손봐야 하지 않을까 싶다.

(define range
(let ((_inner_range
(lambda (%start %end %step)
(let ((_reverse_range
(lambda (start end step)
(let loop ((cursor start)
(result '()))
(if (or (and (>= cursor end) (> step 0))
(and (<= cursor end) (< step 0)))
result
(loop (+ cursor step)
(cons cursor result)))))))
(reverse (_reverse_range %start %end %step))))))
(lambda* (start #:optional (end #f) (step #f))
(cond ((not end)
(begin
(set! end start)
(_inner_range 0 end 1)))
((and end (not step))
(if (<= start end)
(_inner_range start end 1)
(_inner_range start end -1)))
(else
(if (zero? step)
(error "step parameter must not be zero")
(_inner_range start end step)))))))

Posted by 도그마™
,