From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Damien Mattei Newsgroups: gmane.lisp.guile.user Subject: Re: access slot of a class Date: Tue, 21 Nov 2023 09:19:42 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="34343"; mail-complaints-to="usenet@ciao.gmane.io" To: Nate Rosenbloom , guile-user , mikael@djurfeldt.com Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Tue Nov 21 09:20:29 2023 Return-path: Envelope-to: guile-user@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1r5Lzh-0008hw-6u for guile-user@m.gmane-mx.org; Tue, 21 Nov 2023 09:20:29 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r5LzD-0005Uj-NL; Tue, 21 Nov 2023 03:19:59 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r5LzC-0005UW-3E for guile-user@gnu.org; Tue, 21 Nov 2023 03:19:58 -0500 Original-Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1r5Lz9-0002ds-Hy for guile-user@gnu.org; Tue, 21 Nov 2023 03:19:57 -0500 Original-Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-548d4fc9579so2708853a12.1 for ; Tue, 21 Nov 2023 00:19:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700554794; x=1701159594; darn=gnu.org; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=BkVccTPI/NqO4LFGy3FHfXO19FEZrV3e3GvG7ts3nFs=; b=PLVwhLW/JQQ9DAalugxxfhPcMKZoip3E2oRygNekCqCpw0e+JioT4OFm/cLlc2Y0iT zbGnSshoJA0Cg3sS+hpIPCaWOjR0DUIAuhInrN7o6hVMcAm3z1FNFv1yYX+ENmJ8eOec HgS65C1d9g2tbsUX6WrlN4/Nh9BFsvXAedJFz/y3JHRLAo4JrpYhVfcEzg1HIwPHM7Xo URo6/fwGuGpcdDardHqbRohffVQKoAOYh8Ccq41AWFMMHs+xpMMtkg3U5kgTswMkNKbw cWLHwMemB8fbUm6ueHGGOAaQFalI2Xn0qVc0YEwZq5XrGcjK41tKpnBxOXTADpFoJrVf xmyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700554794; x=1701159594; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BkVccTPI/NqO4LFGy3FHfXO19FEZrV3e3GvG7ts3nFs=; b=wkvoHgoAMPvoUXDpQ+nD7kXLJ2k+yAsLd3qQ2IohSJ2ZXRPdTVxzvoqgCKnqG2ZbS/ K1fZqtssVn9jIiAq1goWSDB7E/DjBGa9Ie7TEaBliL58t+RFXny5lvbgwkTT5IGRQ7ZT pP9Qvzbdgzu1aJAsapP5ZXxC25qZbu4SvDRHlWubB/acdWAv4BUCp4AADVV+yhggUCoT 1flGc14EGIwYD6opmco6wgTYf9CvAUYUQ355C+6y4CWxTjQgG1dATXWUCmUVhp0Mug0Z CY3w2za/GXOuxcBco1uKJXX2TyQM855TGBiYy8Y0JtaVIaAVUTHK92EyQYlxBD9Zou6J XttA== X-Gm-Message-State: AOJu0YyJ3v8C1OC1qx8PeqGxVEHZszLOPdYaXK2Hk1HftkkdcEwaC3Hk gHdBvdvbeZBkDf4FB62wfqa+lwfRyK5FfXTVQfQ= X-Google-Smtp-Source: AGHT+IHvUOFPM2XZQxcnY93DSI1ahXA1pTsPNMKzfhSXzUkyJFkz4LF6xuPr7Bg0tJfNICfwrBvLHP3UEzGmSiajcoc= X-Received: by 2002:a50:d559:0:b0:546:d6e1:fbf8 with SMTP id f25-20020a50d559000000b00546d6e1fbf8mr1805710edj.0.1700554793674; Tue, 21 Nov 2023 00:19:53 -0800 (PST) In-Reply-To: Received-SPF: pass client-ip=2a00:1450:4864:20::52d; envelope-from=damien.mattei@gmail.com; helo=mail-ed1-x52d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Original-Sender: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.lisp.guile.user:19317 Archived-At: 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 () (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) (=CE=B7=E2=82=9B 1.0) (z) (z=CC=83) (M) (=E1=90=81) (error 0) ((*init* nc nbiter0 =CE=B7=E2=82=9B0 activation_function_hidden_layer0 activation_function_output_layer0 activation_function_hidden_layer_derivative0 activation_function_output_layer_derivative0) (display "*init* : nc=3D") (display nc) (newline) {nbiter <- nbiter0} {=CE=B7=E2=82=9B <- =CE=B7=E2=82=9B0} ... or in Racket : (define ReseauRetroPropagation (class object% (super-new) ; this is the initialisation parameters (init-field (nc #(2 3 1)) ;; on cr=C3=A9e le tableau des couches du r= =C3=A9seau (nbiter 10000) (=CE=B7=E2=82=9B 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=C3=A9es concr=C3=A8tes seront fournies avec la m=C3=A9thode= 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=3D") (display z) (newline) ; z=CC=83[0] is not used as z[0] is x, the initial data ;;(field (z=CC=83 (vector-ec (:vector lg nc) ;; (make-vector lg 0)))) (field (z=CC=83 (vector-map (lambda (lg) (make-vector lg 0)) nc))) (display "z=CC=83=3D") (display z=CC=83) (newline) {M <+ (vector-ec (: n {lnc - 1}) ; vectors by eager comprehension (SRF= I 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=3D") (display M) (newline) (field (=E1=90=81 (for/vector ([lg nc]) (make-vector lg 0)))) (display "=E1=90=81=3D") (display =E1=90=81) (newline) (display "nbiter=3D") (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=C3=A9es et on les p= ropage (when {vector-length(x) =E2=89=A0 vector-length(z[0])} (display "Mauvais nombre d'entr=C3=A9es !") (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-Fun= ctions.html [2] 8.5 Illustrating Slot Description: https://www.gnu.org/software/guile/manual/html_node/Slot-Description-Exampl= e.html On Mon, Nov 20, 2023 at 11:43=E2=80=AFPM Nate Rosenbloom 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 loo= ks 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/m= anual/html_node/SRFI_002d17.html > [1] 6.7.8 Procedures with Setters: https://www.gnu.org/software/guile/man= ual/html_node/Procedures-with-Setters.html > [2] 8.5 Illustrating Slot Description: https://www.gnu.org/software/guil= e/manual/html_node/Slot-Description-Example.html >