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:21:45 +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="6768"; 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:22:46 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 1r5M1t-0001Ws-DZ for guile-user@m.gmane-mx.org; Tue, 21 Nov 2023 09:22:45 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r5M1N-0006Xr-Qj; Tue, 21 Nov 2023 03:22:13 -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 1r5M1M-0006XZ-Sz for guile-user@gnu.org; Tue, 21 Nov 2023 03:22:12 -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 1r5M17-00038c-Sr for guile-user@gnu.org; Tue, 21 Nov 2023 03:22:00 -0500 Original-Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-53d8320f0easo7562350a12.3 for ; Tue, 21 Nov 2023 00:21:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700554916; x=1701159716; 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=6OO4KqOfroO5YRNDT05miPgzeYXI0N0mQN3tZ/iYmJY=; b=OadNjWQ7TUtCLlkcAeK6Avfn2sa+w4ZKdtPr02Bkd88fvqbqAuPu6IdgSnxinsGrQ+ DO8eLoPwmrjisNqy4Uxnzfd2oSen08BCt47nmKSU9jeeqEslFbj1T/Z8RDs5LnjzJ9Sq bTbUXkTJoFiud8bS09tZvpMtBjT1J02OSA0e55Wn1t64YprPOvvwmpdj0huwKJ/2UrW5 5G0e7ecnilhLJCfacLEhAdCy9qd46BR9oelOnzTgEdFMnellEKkbYn+dWwZTpht5O6Tt EQ+LOdVvZTu2P8C8ZVlbhVPRitr7IQLIv1ZHtKWI4J2oCYeaa1BklXocHlkbn9viSBis ZO6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700554916; x=1701159716; 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=6OO4KqOfroO5YRNDT05miPgzeYXI0N0mQN3tZ/iYmJY=; b=lNqnY9GyOcLcy7yKDfLUvlA3r6T+kEXxPThPJgH9C1m0l/rceRsrSPVvACJKAybPTe RY+2a7uDY6qQ4qTjMHP3GIEYLaXn5rgTp04ZwvHstbG9Xr3k1yGdNQYCcsLzFaM6MEbD STIonCy8FJSS/+eqZPM1/tQ/RBnM7DuLGUsMrtpUJcbqW8JdhnoZIeF0dIvH0ZYMN/S9 tfRkzbAEA62+TxRr73FHO0MCZEhna8EglCJWlRzdFMxKc+w8S2U4ugKKOt7VKIEyhBxW qLykoRQ/xhkvCgroiSUazodjHT1f6yImQ0h3hcCKix5ILII6SImjqNNyS93F2Q6iFxON 6EcA== X-Gm-Message-State: AOJu0YygaOkOcD1l6H+vN0Xh1Ovnt4clj8xyzM3RxiRG/pXLJcWfasek jTXLWHG7vaAyWqfDjAfuBnj49L4x3I1WpmsLBJqeN6+GmcebtQ== X-Google-Smtp-Source: AGHT+IFAy9iZAZwtgjOZhCQJOQGd5Lc0c3OpaoHr5UB85jdFtY6ecUaJe/Livpw/l9tU59XvyLHOKaVHxm+0qfSAfSU= X-Received: by 2002:a05:6402:10d8:b0:543:5568:8dce with SMTP id p24-20020a05640210d800b0054355688dcemr1203792edu.30.1700554916507; Tue, 21 Nov 2023 00:21:56 -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:19318 Archived-At: 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=E2=80=AFAM Damien Mattei 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 () > (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=A9tho= de 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 (S= RFI 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= propage > > (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-F= unctions.html > > [2] 8.5 Illustrating Slot Description: > https://www.gnu.org/software/guile/manual/html_node/Slot-Description-Exam= ple.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 se= t! , > >> 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 l= ooks 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/m= anual/html_node/Procedures-with-Setters.html > > [2] 8.5 Illustrating Slot Description: https://www.gnu.org/software/gu= ile/manual/html_node/Slot-Description-Example.html > >