23 квітня 2012

Kawa: doto, як в Clojur’і

Захотів собі в Kaw’і doto, як в Clojur’і. Довелося вивчати макроси. Ось що вийшло:

; Clojure-like doto macro for Kawa scheme
(define-syntax doto
  (syntax-rules ()
    ((doto object (method . args))
       (let ((obj object))
            (method obj . args)
	    obj))
    ((doto object method1 method2 ...)
         (let ((obj object))
	      (doto obj method1)
	      (doto obj method2 ...)))))

А використовується ось так:

(*:show (doto (javax.swing.JFrame)
  (*:set-title "Hello world!") 
  (*:set-size 300 50)))

Інший варіант

А в модулі clojurian з Chicken Scheme є компактніша реалізація:

(define-syntax doto
  (syntax-rules ()
    ((_ x) x)
    ((_ x (fn args ...) ...)
     (let ((val x))
       (fn val args ...)
       ...
       val))))

© Martin DeMello, Moritz Heidkamp. Ліцензія тут.

0 коментарів | Коментувати