Python의 range 함수를 guile용으로 흉내내어 봤다.
다른 Scheme 컴파일러에서 제대로 돌아가는지는 모른다. 아마도 가변인자 부분을 손봐야 하지 않을까 싶다.
다른 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)))))))
'컴퓨터' 카테고리의 다른 글
발길 닫는 대로 떠나는 여행의 즐거움 - StumbleUpon (0) | 2008.08.20 |
---|---|
웹오피스, 과연 얼마나 좋길래? (2) | 2008.03.02 |
파이어폭스에서 에피파니로 갈아타다. (0) | 2008.03.02 |
범생의 일탈 (0) | 2006.03.21 |
구글이 SWIG를 쓴다니... (0) | 2006.02.06 |