From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by sourceware.org (Postfix) with ESMTPS id 43C883858D1E for ; Wed, 1 Nov 2023 12:22:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 43C883858D1E 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 43C883858D1E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::632 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698841378; cv=none; b=NFDlvpqk+dLmbkGEw27f6cDObZjPqrdcdzbX3TQT6uIquFfi0j/fjrTfFLAVTi5qZzPbUrYdZk4xgQIHhzDciSy6cUrocKcvX0+cmpoprIgoiX3A0sc75oyRhUQGtVYCIG5/UZuch0OQmS8JCKN3foYp31SVogHDCViMcWSf0IM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698841378; c=relaxed/simple; bh=X3YNX0ovQU/UqtW8G2LPnwgUwhukh/rXtPEFnFZAu70=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=RW20Xa+8vJmC4p4Xhjh2EGws8sQqp75FZm1xwy23GzwPzbGcKGkqQ/NV/xE0LYM8dFWL5BjdaGHWf6J3JkBtLKb2+xUddODk6q3w8HrYs63kp/QPL2NHuDrEXsw8N0XFtIa2aAK1XnZZRA9fMYI1FRR/W9okdltcijICGzfYYds= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-9adb9fa7200so168458166b.0 for ; Wed, 01 Nov 2023 05:22:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698841374; x=1699446174; darn=sourceware.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=2adUVq0vUYfXBMgQt8dqnR8h+CsCKCVKTnxG0m6c84M=; b=aisOkiFd8TMQX23KS5A4Bm+Z/XGrjFzwwfStERHXcoI7JY28pVGX79bruhAECPy9JF 3J1bBvlE+19dGxWdB7M1117jt09BV681ItJKspRWsSaYhVE+uQhNnnTOG6e1urMQ4HCt ugMS3QZuzQ+/M37+H8cOqYi++AyXlGb+p4chrV3HrXRHMXJg5JaVkYq9Fg47YFTX62Tl uO72K0U6L+7kj/4UiYgmEXdSNQqKDtcsS8OBX13Lk8qmX22Xi0BlF08av3ZNq9dlpRbe O7Sll5hN8cHwRPs0lKFIcw8e4yLB6FO7ZlH2IOeZXRTPL85I2OKLAceCl5vrDxo9BEkr l+ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698841374; x=1699446174; 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=2adUVq0vUYfXBMgQt8dqnR8h+CsCKCVKTnxG0m6c84M=; b=hFKifWfRVPX4W79GSY/zVvjcFNU+1vOd7yRtznFNt17a9cfUSv9LH88sGhNlsH6Ge8 PK+ip1RhaktDLjBBFnIDjA6wqBT741zjUIlCKIRFap9aFo0gNk9YIfHWRMLfvnh9AvLB gjmyuno95Gy7gH513k4M981pFTjEzZQiQFOP8u2OVOTwQy2tyLbPQ+TMPtXrPjqcLe3r lHVyxULfWRTp6AY4RauD1rAhaFM6ymXpm/8f7eMCTKL312WA6T8qxlk20AQuHCsuEkBo v6c9JbqoS0XLVsWkB/ZA7CjxNW0aYXDobOZbJXHNLjNwl4vvYHEv0+P7nGgTsXmPqTEB bYNw== X-Gm-Message-State: AOJu0YyK8ymp2QIvCoWoBoGJsFzWwHZ3b5ylx/+jWPrO53oGbYyC1CV5 guyOEi23h0/NFAB5sZQn0cLpoqjd8W0FEwpWpLvPKoSaI7s= X-Google-Smtp-Source: AGHT+IGfjXK3qYA4pT5LT7inh6FeD6tD7F5UPxAjQY0ggS1ugwc6XPeL+BuRuSiiQH6Dz7CqnTXY6+WULCDLMY99cuQ= X-Received: by 2002:a17:907:c993:b0:9b2:b37d:17ff with SMTP id uj19-20020a170907c99300b009b2b37d17ffmr1855978ejc.19.1698841374443; Wed, 01 Nov 2023 05:22:54 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Damien Mattei Date: Wed, 1 Nov 2023 13:22:40 +0100 Message-ID: Subject: Re: 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: here is a counter example: ;; test-define.scm (module-name test-define) (export *) (display *) (newline) (define * +) (display *) (newline) ;; main-test-define.scm (require test-define) (define rv (* 2 3)) (display rv) (newline) #|kawa:1|# (load "/Users/mattei/Dropbox/git/Scheme-PLUS-for-Kawa/main-test-define.scm") # # 5 but i do not quite understand , first display shoud have display # but no it displays # On Wed, Nov 1, 2023 at 9:39=E2=80=AFAM Damien Mattei wrote: > > 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-= ref > 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? numbe= r?)) > > > 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) (newlin= e) > (define nb-args (length args)) > ;;(display "new-funct : nb-args =3D ") (display nb-args) (n= ewline) > (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= _v2_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_Learnin= g/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