guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Signals / Messages / Events / ...?


From: Neil Jerram
Subject: Re: Signals / Messages / Events / ...?
Date: Wed, 3 Jan 2018 19:53:28 +0000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0

On 03/01/18 15:11, Christopher Howard wrote:
On Wed, 2018-01-03 at 11:53 +0000, Neil Jerram wrote:
Well, one Lispy mechanism in that area is hooks.  For example, from
some
of my old code:

;; Changes to modem registration state are indicated by calling this
;; hook with args STATE and PROPERTIES.  STATE can be 'none, meaning
;; that there is currently no modem; 'unregistered, meaning that
there
;; is a modem but it isn't registered with the network; or
;; 'registered, meaning that the modem is registered with the
network.
;; If STATE is 'registered, PROPERTIES is an alist of registration
;; properties; otherwise PROPERTIES is #f.
(define registration-hook (make-hook 2))

(define (add-registration-hook proc)
    (add-hook! registration-hook proc))

(define (notify-registration state properties)
    (run-hook registration-hook state properties))

Does that serve your purpose at all?

Best wishes - Neil


I think that should work. Only part I'm not sure about is if you can
have a "one-off" procedure added to a hook... but you could just have
the procedure call remove-hook! to remove itself...?


Yes, I think so, and you could encapsulate that with something like this:

(define (add-hook-once-only! hook proc)
  (letrec ((proc-once-only
            (lambda args
              (remove-hook! hook proc-once-only)
              (apply proc args))))
    (add-hook! hook proc-once-only)))

Best wishes - Neil




reply via email to

[Prev in Thread] Current Thread [Next in Thread]