読者です 読者をやめる 読者になる 読者になる

FLYING

〈全日本・紀文豆乳飲料シリーズ「麦芽コーヒー」の500ミリリットルパックを扱う小売店が少ないことに遺憾の意を表明する会〉活動記録

スタックオブジェクトを作ってみる

(define (create-stack)
	(let ((*s* '()))
	  (lambda (op . args)
	    (cond ((eq? op 'push)
		   (set! *s* (cons (car args) *s*)))
		  ((eq? op 'pop)
		   (if (null? *s*)
		       '()
		       ((lambda (ret)
			  (set! *s* (cdr *s*))
			  ret)
			(car *s*))))
		  (#t '())))))

使い方は次のようになります。

(define p (create-stack)) ;; => p
(define q (create-stack)) ;; => q
(p 'push 1) ;; => (1)
(p 'push 2) ;; => (2 1)
(q 'push 'a) ;; => (a)
(q 'push 'b) ;; => (b a)
(p 'pop) ;; => 2
(p 'pop) ;; => 1
(p 'pop) ;; => ()
(q 'pop) ;; => b
(q 'pop) ;; => a
(q 'pop) ;; => ()

若干括弧に対するアレルギーが薄れてきました!