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 >