From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Marco Maggi" Newsgroups: gmane.lisp.guile.user Subject: accessor with 2/3 parameters Date: Fri, 18 Aug 2006 20:35:45 +0200 Message-ID: NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Trace: sea.gmane.org 1155926181 26962 80.91.229.2 (18 Aug 2006 18:36:21 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Fri, 18 Aug 2006 18:36:21 +0000 (UTC) Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Fri Aug 18 20:36:19 2006 Return-path: Envelope-to: guile-user@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1GE9CD-0007d4-7X for guile-user@m.gmane.org; Fri, 18 Aug 2006 20:35:54 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GE9CC-0001uY-IK for guile-user@m.gmane.org; Fri, 18 Aug 2006 14:35:52 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1GE9C9-0001uT-Gv for guile-user@gnu.org; Fri, 18 Aug 2006 14:35:49 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1GE9C6-0001tu-Q0 for guile-user@gnu.org; Fri, 18 Aug 2006 14:35:48 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GE9C6-0001tk-Ng for guile-user@gnu.org; Fri, 18 Aug 2006 14:35:46 -0400 Original-Received: from [62.241.5.253] (helo=relay-pt2.poste.it) by monty-python.gnu.org with esmtp (Exim 4.52) id 1GE9Is-0005e8-0i for guile-user@gnu.org; Fri, 18 Aug 2006 14:42:46 -0400 Original-Received: from poste.it (192.168.144.99) by relay-pt2.poste.it (7.2.063) (authenticated as marco.maggi-ipsu@poste.it) id 44C76BE70006F876 for guile-user@gnu.org; Fri, 18 Aug 2006 20:35:45 +0200 X-Sensitivity: 3 Original-To: "guile-user" X-XaM3-API-Version: 4.1 (B107) X-SenderIP: 62.10.50.216 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: guile-user-bounces+guile-user=m.gmane.org@gnu.org Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.user:5457 Archived-At: Ciao, I wanted to create an accessor called ELM with synopsis: (set! (elm obj key) value) (elm obj key) which is the same required by the VECTOR-SET! and VECTOR-REF pair. For this both the #:accessor keyword of class definition and the explicit definition: (define-method (elm (obj ) key) ...) (define-method ((setter elm) (obj ) ...) ...) do not work. I had to use: (export elm) (set! elm (ensure-accessor (make-procedure-with-setter (lambda (o key) ...) (lambda (o key value) ...)))) So a working example is: ;; ---------------------------------------- (use-modules (oop goops)) (debug-enable 'debug) (debug-enable 'backtrace) (debug-enable 'trace) (define-class () (v #:init-keyword #:value)) (define elm (ensure-accessor (make-procedure-with-setter (lambda (v k) (vector-ref (slot-ref v 'v) k)) (lambda (v k value) (vector-set! (slot-ref v 'v) k value))))) (define-method (display (o ) (port )) (display (slot-ref o 'v) port)) (define v (make #:value #(1 2 3))) (set! (elm v 1) -9) (display v)(newline) (display (elm v 0))(newline) (display (elm v 1))(newline) (display (elm v 2))(newline) ;; ---------------------------------------- I do not like it because ELM does not know about , but at least ELM is a generic function. Is there a better way to do it? If there is a solution it could be a good idea to add the implementation example to the GOOPS documentation. -- Marco Maggi "They say jump!, you say how high?" Rage Against the Machine - "Bullet in the Head" _______________________________________________ Guile-user mailing list Guile-user@gnu.org http://lists.gnu.org/mailman/listinfo/guile-user