From aed7b1d37cdf6b28f88815af9a2954bbc3113154 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Tue, 13 Nov 2018 00:08:51 +0100 Subject: Introduce define-stateful macro. --- control/monad/state.scm | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/control/monad/state.scm b/control/monad/state.scm index 7e81b38..a8e7775 100644 --- a/control/monad/state.scm +++ b/control/monad/state.scm @@ -40,25 +40,26 @@ (let ((st-list-b ((proc a) st-list-a))) ((proc b) st-list-b)))) -(define (return-state v) +(define-syntax define-stateful + (syntax-rules () + ((_ ((proc args ...) st) body ...) + (define (proc args ...) + (make-state + (lambda (st) body ...)))))) + +(define-stateful ((return-state v) st-list) "Sets the return value to v" - (make-state - (lambda (st-list) - (cons v (cdr st-list))))) + (cons v (cdr st-list))) -(define (get) +(define-stateful ((get) st-list) "Sets the return value of state to st." - (make-state - (lambda (st-list) - (match st-list - ((_ st) - (list st st)))))) + (match st-list + ((_ st) + (list st st)))) -(define (put v) +(define-stateful ((put v) st-list) "Sets st to v." - (make-state - (lambda (st-list) - (list '() v)))) + (list '() v)) (define-method (run-state st-proc init) "Exec state with init as starting state value and st." -- cgit v1.2.3