From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x630.google.com (mail-ej1-x630.google.com [IPv6:2a00:1450:4864:20::630]) by sourceware.org (Postfix) with ESMTPS id 382233858D1E for ; Wed, 1 Nov 2023 08:40:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 382233858D1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 382233858D1E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::630 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698828016; cv=none; b=vPsO9pqkV3qq9xBJxqUTcSykfNWA9MQrjKLfm+Bcm4Vxd3P0GlLI5Tx/qAWktN5Bdj9HSBioC6Hzebj4vL/Fgodw/yWoCgk4qa+1BvMLWknoJTXiDj/SvFOLtBP+vl7b4+uquY/VDVR7EHx8uk7Nm3+0Co1YbkQMSGKYXrw8EzM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698828016; c=relaxed/simple; bh=dVFAArqq90Hi7nkg9Mtx+bKXgCMUV3jt6PcTlQt8mZw=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=NcmT2ZIDmCY4sWr6bZ5imHO4/Q3jnxKScYC7jjAl5vjgTf9Ts/VRCCnzIivl97UmOipw0LRelCQgN75rkI/tSCC66tTCDFoUDQt/kyY5sA9kAuBsVC497dRvJX2e4Seo3ZZ43QSyTPmIWbYq/eS8VNDr5zEZdlJr7P6XYE+CTB4= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-ej1-x630.google.com with SMTP id a640c23a62f3a-9d10f94f70bso652922166b.3 for ; Wed, 01 Nov 2023 01:40:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698828013; x=1699432813; darn=sourceware.org; h=content-transfer-encoding:to:subject:message-id:date:from :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=sESXhN6uPeDfwcXINJKVGX8ULqTxgMgENhpvkYDC/RU=; b=jemggZnecpcUaDxFkoMQTx40qM4CwMt8M4HL1cA46J2pCkLZm3cIJ3XX6pLl+jXKsr EWLBDVdUNqq5eOONTyZH6FYiiFSU9nImnxsXFU9CKksZJTM3bI5VWpzm4nDgU9y1XeRp 08cg8LS2jbeHzwgwpcqpDOfz5U4PQyVWlqX3HrTzmqDAXin/ko87r7vw56gBaAyzCtSX YNfjAG+2Bm2q+O2PX27c0akEVWr00DnrW3tu5lhYKSSEyXq3gWrk6EWdzOwX9jm4+6ek 0g2f134krmyqxO2e4nkiUd2FKE0vr+xypTEg0NQ7IcOPXLgGMBDEtVFlooAByqaXQwIr Je0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698828013; x=1699432813; h=content-transfer-encoding:to:subject:message-id:date:from :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=sESXhN6uPeDfwcXINJKVGX8ULqTxgMgENhpvkYDC/RU=; b=sBK/10hL0NDiOKyhPFtb7doV7jfn1BDNq6T9Seu4I1FZgjd5jOQWdEbGR+QJRxaFeM yIADCANZIyBm+wouKe2MFXmy5O6uEoNA1sfnH4e6/MnRFUdL7Y5CCnQFD0YY0nzxshmG rJ02ssp7fhjnXVDZBMSMIHoTylt8o2pJipBOAial5DdwYBAmwOWYV52aOsR91Anr1Kt8 zboj3X+66lLEfC4PlRtT1GYmUd3WExvyV/MBgHMyIXZAeHJF8ohvp7c107DlTHmdcu6P 72uJ3tOr47Es7++KzWpVyvTKGLlQH3PkAmW02huQbasJkU0WODO40w6ltuX3srUYiYQX Mw4Q== X-Gm-Message-State: AOJu0Yx0dXOj7qlR9TybXs5DrV2x+1V2m20kTrD5PkFjgfdtuBv30Jxn l88DiNQxIlfXLeeIyB7CipCQssukdXgODSHI2ky3qGwIJZc= X-Google-Smtp-Source: AGHT+IEBSm4/iqCiNj274lFLku4MrTPVxicBNFKao8JUOjUNN5NxF++H7lfjmpj/9CksWlj0VhSQOy33nz0sLxX0mpw= X-Received: by 2002:a17:907:7254:b0:9bd:f3b0:c087 with SMTP id ds20-20020a170907725400b009bdf3b0c087mr1383907ejc.2.1698828012452; Wed, 01 Nov 2023 01:40:12 -0700 (PDT) MIME-Version: 1.0 From: Damien Mattei Date: Wed, 1 Nov 2023 09:39:38 +0100 Message-ID: Subject: unbound location: * To: kawa mailing list Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-0.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: hello, i created a module this way: (module-name "matrix") (export multiply-matrix-matrix multiply-matrix-vector matrix matrix-v create-matrix-by-function dim-matrix matrix-ref matrix-set! matrix-line-ref matrix-line-set! vector->matrix-column matrix-column->vector *) (require Scheme+) ;; (matrix #(1 2 3)) ;; matrix@4612b856 (define-simple-class matrix () (v :: vector) ((*init* (vParam :: vector)) (set! v vParam)) ) (display "multiply : * =3D") (display *) (newline) ;; (define M (create-matrix-by-function (lambda (i j) (+ i j)) 2 3)) (define (create-matrix-by-function fct lin col) (matrix (create-vector-2d fct lin col))) ;; return the line and column values of dimension ;; (dim-matrix M) ;; 2 3 (define (dim-matrix M) (when (not (matrix? M)) (error "argument is not of type matrix")) {v <+ (matrix-v M)} {lin <+ (vector-length v)} {col <+ (vector-length {v[0]})} (values lin col)) ;; #|kawa:85|# (define M1 (create-matrix-by-function (lambda (i j) (+ i j)) 2 3)) ;; #|kawa:86|# (define M2 (create-matrix-by-function (lambda (i j) (+ i j)) 3 2)) ;; #|kawa:87|# (multiply-matrix-matrix M1 M2) ;; matrix@3fc1abf ;; #|kawa:88|# (define M1*M2 (multiply-matrix-matrix M1 M2)) ;; #|kawa:89|# M1*M2 ;; matrix@3bf5911d ;; #|kawa:90|# (matrix-v M1*M2) ;; #(#(5 8) #(8 14)) ;; #|kawa:91|# (matrix-v M1) ;; #(#(0 1 2) #(1 2 3)) ;; #|kawa:92|# (matrix-v M2) ;; #(#(0 1) #(1 2) #(2 3)) (define (multiply-matrix-matrix M1 M2) {(n1 p1) <+ (dim-matrix M1)} {(n2 p2) <+ (dim-matrix M2)} (when {p1 =E2=89=A0 n2} (error "matrix.* : matrix product impossible, incompatible dimensions")) {v1 <+ (matrix-v M1)} {v2 <+ (matrix-v M2)} (define (res i j) {sum <+ 0} (for ({k <+ 0} {k < p1} {k <- k + 1}) {sum <- sum + v1[i][k] * v2[k][j]}) (display "sum=3D")(display sum) (newline) sum) {v <+ (create-vector-2d res n1 p2)} (matrix v)) (overload-existing-operator * multiply-matrix-matrix (matrix? matrix?)) .... i cut off the whole code, the code used to works with 'include' , now that i try with modules i stuck on this error at the line (overload-existing-operator * multiply-matrix-matrix (matrix? matrix?)) note that matrix+.scm is converted externally in matrix.scm : (module-name "matrix") (export multiply-matrix-matrix multiply-matrix-vector matrix matrix-v create-matrix-by-function dim-matrix matrix-ref matrix-set! matrix-line-re= f matrix-line-set! vector->matrix-column matrix-column->vector *) (require Scheme+) (define-simple-class matrix () (v :: vector) ((*init* (vParam :: vector)) (set! v vParam))) (display "multiply : * =3D") (display *) (newline) (define (create-matrix-by-function fct lin col) (matrix (create-vector-2d fct lin col))) (define (dim-matrix M) (when (not (matrix? M)) (error "argument is not of type matrix")) (<+ v (matrix-v M)) (<+ lin (vector-length v)) (<+ col (vector-length (bracket-apply v 0))) (values lin col)) (define (multiply-matrix-matrix M1 M2) (<+ (n1 p1) (dim-matrix M1)) (<+ (n2 p2) (dim-matrix M2)) (when (|=E2=89=A0| p1 n2) (error "matrix.* : matrix product impossible, incompatible dimensions")) (<+ v1 (matrix-v M1)) (<+ v2 (matrix-v M2)) (define (res i j) (<+ sum 0) (for ((<+ k 0) (< k p1) ($nfx$ k <- k + 1)) ($nfx$ sum <- sum + (bracket-apply (bracket-apply v1 i) k) * (bracket-apply (bracket-apply v2 k) j))) (display "sum=3D") (display sum) (newline) sum) (<+ v (create-vector-2d res n1 p2)) (matrix v)) (overload-existing-operator * multiply-matrix-matrix (matrix? matrix?)) (define (matrix-v M) (slot-ref M (quote v))) (define (vector->matrix-column v) (matrix (vector-map (lambda (x) (make-vector 1 x)) v))) (define (matrix-column->vector Mc) (<+ v (matrix-v Mc)) (vector-map (lambda (v2) (bracket-apply v2 0)) v)) (define (multiply-matrix-vector M v) (<+ Mc (vector->matrix-column v)) (matrix-column->vector (multiply-matrix-matrix M Mc))) (define (matrix-ref M lin col) (<+ v (matrix-v M)) (bracket-apply (bracket-apply v lin) col)) (define (matrix-set! M lin col x) (<+ v (matrix-v M)) (<- (bracket-apply (bracket-apply v lin) col) x)) (define (matrix-line-ref M lin) (<+ v (matrix-v M)) (bracket-apply v lin)) (define (matrix-line-set! M lin vect-line) (<+ v (matrix-v M)) (<- (bracket-apply v lin) vect-line)) (overload-square-brackets matrix-ref matrix-set! (matrix? number? number?)) (overload-square-brackets matrix-line-ref matrix-line-set! (matrix? number?= )) overload-existing-operator redefine the * operator , so basically it needs the original one to not loose the * between numbers the code is: (define-syntax overload-existing-operator (syntax-rules () ((_ orig-funct funct (pred-arg1 ...)) (define orig-funct (create-overloaded-existing-operator orig-funct funct (list pred-arg1 ...)))))) (define (create-overloaded-existing-operator orig-funct funct pred-list) ;; works for associative operators (display "create-overloaded-existing-operator") (display " : pred-list =3D ") (display pred-list) (newline) (define old-funct orig-funct) (define new-funct (lambda args ;; args is the list of arguments ;; (display "new-funct: new-funct =3D ") (display new-funct) (newline) ;; (display "new-funct : pred-list =3D ") (display pred-list) (newline) ;; (display "new-funct : args =3D ") (display args) (newline) (define nb-args (length args)) ;;(display "new-funct : nb-args =3D ") (display nb-args) (new= line) (cond ((check-arguments pred-list args) ;;(begin ;;(display "new funct :calling:") (display funct) (newline) (apply funct args));;) ((> nb-args 2) (new-funct (car args) (apply new-funct (cdr args)))) ;; op(a,b,...) =3D op(a,op(b,...)) (else ;;(begin ;;(display "new funct :calling: ") (display old-funct) (newline) (apply old-funct args)))));;) (display "funct: ") (display funct) (newline) (display "orig-funct: ") (display orig-funct) (newline) (display "old-funct: ") (display old-funct) (newline) (display "new-funct: ") (display new-funct) (newline) (replace-operator! orig-funct new-funct) new-funct) this weird code return the new-funct which is the overloaded * , at the line (overload-existing-operator * multiply-matrix-matrix (matrix? matrix?)) i got this error: Exception in thread "main" java.lang.ExceptionInInitializerError at atInteractiveLevel-8.run(exo_retropropagationNhidden_layers_matrix_v= 2_by_vectors4kawa+.scm:43) at gnu.expr.ModuleExp.evalModule2(ModuleExp.java:290) at gnu.expr.ModuleExp.evalModule(ModuleExp.java:211) at kawa.Shell.run(Shell.java:289) at kawa.Shell.runFile(Shell.java:551) at kawa.standard.load.apply2(load.java:67) at kawa.standard.load.apply1(load.java:27) at gnu.mapping.Procedure1or2.applyToObject(Procedure1or2.java:64) at gnu.mapping.Procedure.applyToConsumerDefault(Procedure.java:75) at gnu.mapping.CallContext.runUntilDone(CallContext.java:586) at gnu.expr.ModuleExp.evalModule2(ModuleExp.java:343) at gnu.expr.ModuleExp.evalModule(ModuleExp.java:211) at kawa.Shell.run(Shell.java:289) at kawa.Shell.run(Shell.java:196) at kawa.Shell.run(Shell.java:183) at kawa.repl.processArgs(repl.java:724) at kawa.repl.main(repl.java:830) Caused by: /Users/mattei/Library/CloudStorage/Dropbox/git/AI_Deep_Learning/= kawa/matrix.scm:9:10: unbound location: * at gnu.mapping.PlainLocation.get(PlainLocation.java:22) at matrix.(matrix.scm:9) ... 17 more ok * seems not bound to any procedure when i display it for debug i got: multiply : * =3D% note that % is in reversed colors (white on black background) i cannot copy/paste it.... all the code is called from a main file: (require matrix) (require array) (require Scheme+) it seems in a module * is not bound to anything, i had a same problem in Racket where i need to import racket/base, is there such a need in Kawa? ,i can find anything related in the doc. regards, damien