(macrolet ((make ((class format-control) &body body) (let ((name (a:format-symbol :keyword format-control class))) `(defmethod try-make-set-from-tiles chained-or ,name (tiles winning-tile taken-from forbidden-sets) ,@body))) (define-set-maker-min (class count) `(make (class "~A-WINNING-TILE") (when (not (eq taken-from :tsumo)) (try-make-same-tile-set-from-tiles-with-winning-tile tiles winning-tile forbidden-sets ',class ,count :taken-from taken-from)))) (define-set-maker-an-agaripai (class count) `(make (class "~A-WINNING-TILE") (when (eq taken-from :tsumo) (try-make-same-tile-set-from-tiles-with-winning-tile tiles winning-tile forbidden-sets ',class ,count)))) (define-set-maker-an-no-agaripai (class count) `(make (class "~A-NO-WINNING-TILE") (try-make-same-tile-set-from-tiles-without-winning-tile tiles winning-tile forbidden-sets ',class ,count)))) (define-set-maker-min mintoi 2) (define-set-maker-min minkou 3) (define-set-maker-min minkan 4) (define-set-maker-an-agaripai antoi 2) (define-set-maker-an-agaripai ankou 3) (define-set-maker-an-agaripai ankan 4) (define-set-maker-an-no-agaripai antoi 2) (define-set-maker-an-no-agaripai ankou 3) (define-set-maker-an-no-agaripai ankan 4))