just forget to say that in my previous examples, <- is a macro that
contain a set! case that is used with single variable.(does not use
setter, just set!)
On Tue, Nov 21, 2023 at 9:19 AM Damien Mattei <damien.mat...@gmail.com> wrote:
>
> that is interesting answer about guile's features i did not know ,
> it is related with code i'm writing that instead of fetching the value
> modify it using the fetch syntax in Scheme+ but my question was just
> about how to have a class method in a class that can set! the value of
> a slot. This does nt seem to be available in Guile because "A method
> is not formally associated with any single class (as it is in many
> other object oriented languages)" [0].
>
> i will explain the problem more in my answer to Mikael and you, i just
> wanted to be able to create a class method that can access the slot
> directly , more than in the example [2] :
>
> (define-class <my-complex> (<number>)
>    (r #:init-value 0 #:accessor real-part #:init-keyword #:r)
>    (i #:init-value 0 #:accessor imag-part #:init-keyword #:i))
>
> (set! (real-part c) new-value)
>
> in othe Scheme i can do simply:
>
> (set! r new-value)
>
> for example in Kawa:
>
> (define-simple-class ReseauRetroPropagation ()
>
>   (nbiter init-value: 3)
>   (activation_function_hidden_layer)
>   (activation_function_output_layer)
>   (activation_function_hidden_layer_derivative)
>   (activation_function_output_layer_derivative)
>
>   (ηₛ 1.0)
>
>   (z)
>   (z̃)
>
>   (M)
>
>   (ᐁ)
>
>   (error 0)
>
>   ((*init* nc nbiter0 ηₛ0 activation_function_hidden_layer0
>                      activation_function_output_layer0
>               activation_function_hidden_layer_derivative0
>               activation_function_output_layer_derivative0)
>
>    (display "*init* : nc=") (display nc) (newline)
>    {nbiter <- nbiter0}
>    {ηₛ <- ηₛ0}
>
> ...
>
> or in Racket :
>
> (define ReseauRetroPropagation
>
>   (class object%
>
>      (super-new)
>
>      ; this is the initialisation parameters
>      (init-field (nc #(2 3 1)) ;; on crée le tableau des couches du réseau
>                     (nbiter 10000)
>                     (ηₛ 1.0)
>              (activation_function_hidden_layer tanh)
>              (activation_function_output_layer tanh)
>              (activation_function_hidden_layer_derivative der_tanh)
>              (activation_function_output_layer_derivative der_tanh))
>
>      {lnc <+ (vector-length nc)}
>
>      ; les entrées concrètes seront fournies avec la méthode accepte
>      ;; (field (z (vector-ec (: i (vector-length nc)) (make-vector {nc[i]} 
> 0))))
>      ;;(field (z (vector-ec (:vector lg nc)
>     ;;              (make-vector lg 0))))
>      (field (z (vector-map (lambda (lg) (make-vector lg 0))
>                    nc)))
>
>      ;; (field (z (for/vector ([lg nc])
>      ;;                (make-vector lg 0))))
>
>      (display "z=") (display z) (newline)
>
>
>      ; z̃[0] is not used as z[0] is x, the initial data
>      ;;(field (z̃ (vector-ec (:vector lg nc)
>         ;;          (make-vector lg 0))))
>      (field (z̃ (vector-map (lambda (lg) (make-vector lg 0))
>                    nc)))
>
>
>      (display "z̃=") (display z̃) (newline)
>
>
>      {M <+ (vector-ec (: n {lnc - 1}) ; vectors by eager comprehension (SRFI 
> 42)
>               create-matrix-vect-by-function(uniform-dummy nc[n + 1]
> {nc[n] + 1}))} ;; Matrix-vect
>
>      ;(field (M (vector-ec (: n {lnc - 1}) ; vectors by eager
> comprehension (SRFI 42)
>      ;          (create-matrix-vect-by-function uniform-dummy {nc[n +
> 1]} {nc[n] + 1})))) ;; Matrix-vect
>
>
>      (display "M=") (display M) (newline)
>
>      (field (ᐁ (for/vector ([lg nc])
>                    (make-vector lg 0))))
>
>
>      (display "ᐁ=") (display ᐁ) (newline)
>
>      (display "nbiter=") (display nbiter) (newline)
>
>      (field (error 0))
>
>
>      ; forward propagation
>
>          ; z_* sans le coef. 1 constant pour le bias
>      (define (accepte_et_propage x) ; on entre des entrées et on les propage
>
>         (when {vector-length(x) ≠ vector-length(z[0])}
>           (display "Mauvais nombre d'entrées !") (newline)
>           (exit #f))
>
>         {z[0] <- x} ; on ne touche pas au biais
>
> in those 2 example z is a slot (or field in Racket) of the class
> ReseauRetroPropagation that can directly be accessed from a class
> method without using the accessors (getter and setter)
>
> Regards,
> Damien
>
>
>
>
> [0] 8.6 Methods and Generic Functions
> https://www.gnu.org/software/guile/manual/html_node/Methods-and-Generic-Functions.html
>
> [2] 8.5  Illustrating Slot Description:
> https://www.gnu.org/software/guile/manual/html_node/Slot-Description-Example.html
>
> On Mon, Nov 20, 2023 at 11:43 PM Nate Rosenbloom
> <nate.rosenbl...@gmail.com> wrote:
> >>
> >> is there a way to access a slot of a class like other variable with set! ,
> >> Racket,Kawa allow that, but it does not seem to be the case in Guile.
> >
> >
> > Hello Damien:
> > Does 'generalized set'[0] do what you want?
> > You can create accessor procedures that have an attached setter -
> >
> > Or were you speaking specifically about class slots? In which case it looks 
> > like the accessor can be used in in set!: [2]
> > Thanks,
> > Nate
> > [0] 7.5.14 sfri 17 Generalized set!: 
> > https://www.gnu.org/software/guile/manual/html_node/SRFI_002d17.html
> > [1] 6.7.8 Procedures with Setters: 
> > https://www.gnu.org/software/guile/manual/html_node/Procedures-with-Setters.html
> > [2] 8.5  Illustrating Slot Description: 
> > https://www.gnu.org/software/guile/manual/html_node/Slot-Description-Example.html
> >

Reply via email to