From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) by sourceware.org (Postfix) with ESMTPS id D1F4D3858D1E for ; Wed, 1 Nov 2023 16:48:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D1F4D3858D1E 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 D1F4D3858D1E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::635 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698857294; cv=none; b=a9H81macyKxX9lSvk/9llP/qMwyK9H5vzYvDKnhS1M39rEFc8is8FltrA7p/ivS9MLvCbTzDs/AmH+piusZGzVTlH5IAxULwh+Lr4sO1ABVS06c5CPjXv0sHuMnxiEGBNyxnM4Y+dwd0hsq7daGXH8RB74toejilLX11L+DWpMY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698857294; c=relaxed/simple; bh=TNGjjLTKPX9q1PUEjzUyfcrU5OSSKfuwuyVJJpvR5F0=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=HBHUVfi3G1KYrhYfgtuKQoSzA2zn3L3IqNsBl5Epbg7tKT2yISfGQtbzfsDnhr30ntZJduDL8zPjwthZqwezP9T9vymES4cjrOLI5es0G5ArjkvDI8Ih6aI/c5qAjTc2Z61hQfEwTTdrhI5qUJ1SZ1WdmvM52Q2nwkzXwP3yoOA= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-9bf86b77a2aso2472366b.0 for ; Wed, 01 Nov 2023 09:48:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698857282; x=1699462082; 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=ARFjO1fskdvUBuuyXgutnKlWPEF8dz17WBBn4n0zdBY=; b=naoeQ6lGE/LQfN5YhmJ+PEqRqfDUE3m/MvuqpTeNWQJbBjQaCPs+AeA0qgKec3UVxH TvM57qyColu7A/pwSsHoAC9VAoBt0Ahxs+fvJQ1RgZKBlv42LoelNcKsvdkdKLHFPqkJ jncpoTSQHiYCO6ZugCc24137i18h+Af7584fcZn0141oqsuAo917VubdF+BnW3nZiHkc YyuOyeic+4eDyyV09AOryIbQmXt+QGaz1t/ELbtH1DSKFUmw35SYTMLbalU7yZZt3jns zYau8ILreuLlOo7u6pm/skC9yTbxteeDaN7krLQjYIZnz1dCd/jHdFvgEPkEA0j298+Z QItA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698857282; x=1699462082; 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=ARFjO1fskdvUBuuyXgutnKlWPEF8dz17WBBn4n0zdBY=; b=Y+3cUSUVWxO3woTx7SwEBtBes6VyWSua3TEkokRL/GLI10I1OG/8f9+9ePdZPe8Krj XA0DeNzescn1JZPcEWwL2+iYPiav5hYVq0+Zq0W2YTvKIx1Xa82o8DUTifbErlS1dc9q E26eCsRpIjqgrDYhrSpOOsKnTlmF2sLtJ8RyDGkwRtdSY3VMuf1oXbluGBLUo2NQGwTz aprJcyDYyZl/mO74MYKHw5bcqw6WN3OjwC9+ogETLTBTiwcMxEyUyvLR86LyS62xG8xI Zt2DD/tzlSMJcfs1zt77N0d2g3kxZ0v3OHyGOxwrXxYK6ooPLAMcC7VeeUBshk72UQPH usdw== X-Gm-Message-State: AOJu0Yzwva1x40IPl1D9GxeNrjIETxE6U7z8vdXGZBaYrUH6j4B7/++6 5FQZ1yd+m+sZA7UF2xeoQOTI1pMLtlSd3yJwXWBPszQymmE= X-Google-Smtp-Source: AGHT+IGLxon1NwDnavmdFNiXej6GPisdz+5TERdizXz0PZSd9j3WMzUvyorYPlj7VUX/KXPjZVc2dfJCs864uqyLTW8= X-Received: by 2002:a17:906:4705:b0:9a1:abae:8d30 with SMTP id y5-20020a170906470500b009a1abae8d30mr1747106ejq.47.1698857281671; Wed, 01 Nov 2023 09:48:01 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Damien Mattei Date: Wed, 1 Nov 2023 17:47:45 +0100 Message-ID: Subject: Re: unbound location: * To: kawa mailing list , Per Bothner Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-0.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,KAM_SHORT,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: and replacing 'define' by '!' and it works more: https://www.gnu.org/software/kawa/tutorial/Variables.html #|kawa:1|# (load "/Users/mattei/Dropbox/git/Scheme-PLUS-for-Kawa/main-test-define.scm") /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/test-de= fine.scm:50:10: warning - no use of create-overloaded-existing-operator2 create-overloaded-existing-operator : pred-list =3D (# #) funct: # orig-funct: #!null old-funct: #!null new-funct: # rv=3D#(1 2 3 4 5) #|kawa:2|# + # #|kawa:3|# (+ 2 3) Argument #1 (null) to 'apply' has wrong type (expected: procedure, sequence, or other operator) at gnu.kawa.functions.ApplyToArgs.applyRest(ApplyToArgs.java:209) at gnu.kawa.functions.ApplyToArgs.applyToConsumerA2A(ApplyToArgs.java:1= 34) at gnu.kawa.functions.Apply.applyToConsumer(Apply.java:31) at gnu.mapping.CallContext.runUntilDone(CallContext.java:586) at gnu.mapping.CallContext.runUntilValue(CallContext.java:669) at gnu.mapping.Procedure.apply2(Procedure.java:160) at test-define$frame.lambda2newFunct$V(test-define.scm:38) at test-define$frame.lambda2newFunct$check(test-define.scm:24) 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) but i have no more access to previous definition that is not keep in the overloaded procedure,see #!null values: here are my two attempt codes: (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) (define (create-overloaded-existing-operator2 orig-funct funct pred-list) ;; works for associative operators (let ((old-funct orig-funct)) (letrec ((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) new-funct))) with define or let and letrec it give the same #!null ???? On Wed, Nov 1, 2023 at 5:11=E2=80=AFPM Damien Mattei wrote: > > if i modify a bit this version with define-variable instead of > define, it seems to go further as i got an infinite loop: > > #|kawa:1|# (load > "/Users/mattei/Dropbox/git/Scheme-PLUS-for-Kawa/main-test-define.scm") > Exception in thread "main" java.lang.StackOverflowError > at java.base/java.lang.ThreadLocal.get(ThreadLocal.java:172) > at gnu.mapping.Environment.getCurrent(Environment.java:373) > at gnu.mapping.DynamicLocation.lookup(DynamicLocation.java:28) > at gnu.mapping.DynamicLocation.isBound(DynamicLocation.java:46) > at gnu.kawa.reflect.FieldLocation.isBound(FieldLocation.java:360) > at gnu.mapping.SharedLocation.isBound(SharedLocation.java:34) > at gnu.mapping.InheritingEnvironment.getLocation(InheritingEnvironmen= t.java:71) > at gnu.mapping.DynamicLocation.lookup(DynamicLocation.java:29) > at gnu.mapping.DynamicLocation.isBound(DynamicLocation.java:46) > at gnu.kawa.reflect.FieldLocation.isBound(FieldLocation.java:360) > at gnu.mapping.SharedLocation.isBound(SharedLocation.java:34) > at gnu.mapping.InheritingEnvironment.getLocation(InheritingEnvironmen= t.java:71) > at gnu.mapping.DynamicLocation.lookup(DynamicLocation.java:29) > at gnu.mapping.DynamicLocation.isBound(DynamicLocation.java:46) > at gnu.kawa.reflect.FieldLocation.isBound(FieldLocation.java:360) > at gnu.mapping.SharedLocation.isBound(SharedLocation.java:34) > at gnu.mapping.InheritingEnvironment.getLocation(InheritingEnvironmen= t.java:71) > at gn > > .... > > On Wed, Nov 1, 2023 at 3:02=E2=80=AFPM Damien Mattei wrote: > > > > i post a version of my problem independent to Scheme+. > > in two attached files containing this kawa code code: > > (module-name test-define) > > > > (require 'srfi-1) > > > > (export +) > > > > > > (define (check-arguments pred-list args) > > (if (=3D (length pred-list) (length args)) > > (let ((pred-arg-list (map cons pred-list args))) > > ;;(andmap (lambda (p) ((car p) (cdr p))) > > ;; replace andmap with every in Guile > > (every (lambda (p) ((car p) (cdr p))) > > pred-arg-list)) > > #f)) > > > > > > (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) (newl= ine) > > (define nb-args (length args)) > > ;;(display "new-funct : nb-args =3D ") (display nb-args) = (newline) > > (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) > > > > (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 ...)))))) > > > > > > > > ; first stage overloading > > ;;(define-overload-existing-operator +) ;; dummy in this implementation > > > > > > > > ; second stage overloading > > (overload-existing-operator + vector-append (vector? vector?)) > > > > > > (display +) (newline) > > > > > > > > and a simple main: > > (require test-define) > > > > (define rv (+ #(1 2) #(3 4 5))) > > (newline) (display "rv=3D") (display rv) (newline) > > > > i load it this way: > > > > kawa -Dkawa.import.path=3D".:/Users/mattei/Dropbox/git/Scheme-PLUS-for-= Kawa:./kawa" > > > > (load "/Users/mattei/Dropbox/git/Scheme-PLUS-for-Kawa/main-test-define.= scm") > > > > #|kawa:1|# (load > > "/Users/mattei/Dropbox/git/Scheme-PLUS-for-Kawa/main-test-define.scm") > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/tes= t-define.scm:63:29: > > unbound location: + > > at gnu.mapping.PlainLocation.get(PlainLocation.java:22) > > at test-define.run(test-define.scm:63) > > at gnu.expr.ModuleBody.run(ModuleBody.java:51) > > at gnu.expr.ModuleBody.run(ModuleBody.java:35) > > at atInteractiveLevel-2.run(main-test-define.scm:1) > > 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) > > > > On Wed, Nov 1, 2023 at 1:50=E2=80=AFPM Damien Mattei wrote: > > > > > > a simpler example that lead to the same error: > > > > > > (module-name test-define) > > > > > > (require Scheme+) > > > > > > (export +) > > > > > > ; first stage overloading > > > (define-overload-existing-operator +) > > > > > > > > > > > > ; second stage overloading > > > (overload-existing-operator + vector-append (vector? vector?)) > > > > > > > > > (display +) (newline) > > > > > > > > > a main file: > > > > > > (require test-define) > > > > > > (define rv (+ #(1 2) #(3 4 5))) > > > (newline) (display "rv=3D") (display rv) (newline) > > > > > > result: > > > #|kawa:1|# (load > > > "/Users/mattei/Dropbox/git/Scheme-PLUS-for-Kawa/main-test-define.scm"= ) > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/a= rray.scm:89:6: > > > warning - void-valued expression where value is needed > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:15:10: > > > warning - no use of only-one? > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:18:10: > > > warning - no use of pair-list? > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:21:10: > > > warning - no use of empty? > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:54:10: > > > warning - no use of insertNoDups > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:61:10: > > > warning - no use of remove-duplicates > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:67:10: > > > warning - no use of singleton-list? > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:73:10: > > > warning - no use of create-list > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:88:10: > > > warning - no use of uniq > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:97:10: > > > warning - no use of remove-firsts-elements > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:115:10: > > > warning - no use of remove-last > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:157:10: > > > warning - no use of debut > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:162:10: > > > warning - no use of debut-iter > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:173:10: > > > warning - no use of not-list? > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:181:10: > > > warning - no use of before-element > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:189:10: > > > warning - no use of start-with-element > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/l= ist.scm:198:10: > > > warning - no use of pair-list-elements > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/o= verload.scm:399:10: > > > warning - no use of > > > find-getter-and-setter-for-overloaded-square-brackets > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/a= pply-square-brackets.scm:332:7: > > > warning - void-valued expression where value is needed > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/a= pply-square-brackets.scm:337:7: > > > warning - void-valued expression where value is needed > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/a= rray.scm: > > > note - skipped 0 errors, 29 warnings, 0 notes > > > /Users/mattei/Library/CloudStorage/Dropbox/git/Scheme-PLUS-for-Kawa/t= est-define.scm:13:29: > > > unbound location: + > > > at gnu.mapping.PlainLocation.get(PlainLocation.java:22) > > > at test-define.run(test-define.scm:13) > > > at gnu.expr.ModuleBody.run(ModuleBody.java:51) > > > at gnu.expr.ModuleBody.run(ModuleBody.java:35) > > > at atInteractiveLevel-2.run(main-test-define.scm:1) > > > 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) > > > > > > why + is unbound? in the worse case i should still have the default a= ddition,no? > > > > > > seems something is crashing in this code without any element to debug= : > > > (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) (ne= wline) > > > (define nb-args (length args)) > > > ;;(display "new-funct : nb-args =3D ") (display nb-args= ) (newline) > > > (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) > > > > > > On Wed, Nov 1, 2023 at 1:22=E2=80=AFPM Damien Mattei wrote: > > > > > > > > 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.sc= m") > > > > # > > > > # > > > > 5 > > > > > > > > but i do not quite understand , first display shoud have display #<= procedure *> > > > > 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 impos= sible, > > > > > 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? mat= rix?)) > > > > > > > > > > > > > > > > > > > > .... > > > > > > > > > > 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? mat= rix?)) > > > > > > > > > > note that matrix+.scm is converted externally in matrix.scm : > > > > > > > > > > (module-name "matrix") > > > > > (export multiply-matrix-matrix multiply-matrix-vector matrix matr= ix-v > > > > > create-matrix-by-function dim-matrix matrix-ref matrix-set! matr= ix-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 dime= nsions")) > > > > > (<+ 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? mat= rix?)) > > > > > (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-colum= n 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-appl= y 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! (matri= x? 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) (newline) > > > > > (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_layer= s_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.jav= a: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 c= annot > > > > > 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 pro= blem > > > > > in Racket where i need to import racket/base, is there such a nee= d in > > > > > Kawa? ,i can find anything related in the doc. > > > > > > > > > > regards, > > > > > damien