www.delorie.com/gnu/docs/guile/guile_261.html   search  
Buy GNU books!

Guile Reference Manual

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.4 Procedures with Setters

A procedure with setter is a special kind of procedure which normally behaves like any accessor procedure, that is a procedure which accesses a data structure. The difference is that this kind of procedure has a so-called setter attached, which is a procedure for storing something into a data structure.

Procedures with setters are treated specially when the procedure appears in the special form set! (REFFIXME). How it works is best shown by example.

Suppose we have a procedure called foo-ref, which accepts two arguments, a value of type foo and an integer. The procedure returns the value stored at the given index in the foo object. Let f be a variable containing such a foo data structure.(10)

(foo-ref f 0)       => bar
(foo-ref f 1)       => braz

Also suppose that a corresponding setter procedure called foo-set! does exist.

(foo-set! f 0 'bla)
(foo-ref f 0)       => bla

Now we could create a new procedure called foo, which is a procedure with setter, by calling make-procedure-with-setter with the accessor and setter procedures foo-ref and foo-set!. Let us call this new procedure foo.

(define foo (make-procedure-with-setter foo-ref foo-set!))

foo can from now an be used to either read from the data structure stored in f, or to write into the structure.

(set! (foo f 0) 'dum)
(foo f 0)          => dum

Scheme Procedure: make-procedure-with-setter procedure setter
C Function: scm_make_procedure_with_setter (procedure, setter)
Create a new procedure which behaves like procedure, but with the associated setter setter.

Scheme Procedure: procedure-with-setter? obj
C Function: scm_procedure_with_setter_p (obj)
Return #t if obj is a procedure with an associated setter procedure.

Scheme Procedure: procedure proc
C Function: scm_procedure (proc)
Return the procedure of proc, which must be either a procedure with setter, or an operator struct.

Scheme Procedure: setter proc
Return the setter of proc, which must be either a procedure with setter or an operator struct.

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

  webmaster     delorie software   privacy  
  Copyright 2003   by The Free Software Foundation     Updated Jun 2003