On Fri, May 10, 2024 at 12:35 AM Jean Abou Samra <j...@abou-samra.fr> wrote:
> > > > Le 9 mai 2024 à 23:57, Damien Mattei <damien.mat...@gmail.com> a écrit : > > > > it worked now removing the syntax->datum but not in all programs , i do > not > > know why, program it fails was overloading some operator so i think the > > syntax symbol of operator was not correlated with the good function > > overloaded. > > Sorry, I don't understand what you're trying to express here. > this was just a 5.00 AM clock assumption, so i'm not sure but : when i remove syntax->datum (see commented code below) in macro <- : ;; example: {a[4] <- 7} ;; $bracket-apply$ is from SRFI 105 $bracket-apply$ is an argument of the macro <- here ((_ (brket-applynext container index ...) expr) ; possible to have NO index : ; minimal form is (_ (brket-applynext container) expr) ;; We will let the second $bracket-apply$ be executed and forbid the execution of first $bracket-apply$. (cond ((equal? (quote $bracket-apply$next) (syntax->datum #'brket-applynext)) ;; already parsed and optimised by parser #'(assignmentnext container expr index ...)) ; possible to have NO index ;; integrated curly-infix of guile (no parsing) at REPL ((equal? (quote $bracket-apply$) (syntax->datum #'brket-applynext)) (display "<- : #'(index ...) = ") (display #'(index ...)) (newline) (display "<- : (syntax->datum #'(index ...)) = ") (display (syntax->datum #'(index ...))) (newline) ;;(display "<- : (number? (car (syntax->datum #'(index ...)))) = ") (display (number? (car (syntax->datum #'(index ...))))) (newline) ;; parse arguments at posteriori here: (with-syntax ((parsed-args (datum->syntax stx ; #f (cons #'list (optimizer-parse-square-brackets-arguments-lister (syntax->datum #'(index ...))))))) ;; (with-syntax ((parsed-args ;; (cons #'list ;; otherwise:Wrong type to apply: 0 ,list will be interpreted as code ! ;; (optimizer-parse-square-brackets-arguments-lister #'(index ...))))) (display "<- : #'parsed-args=") (display #'parsed-args) (newline) (display "<- : (syntax->datum #'parsed-args)=") (display (syntax->datum #'parsed-args)) (newline) (case (length (cdr (syntax->datum #'parsed-args))) ;;(case (length (cdr #'parsed-args)) ;;(case (length #'parsed-args) if i do this instead: (with-syntax ((parsed-args (cons #'list (optimizer-parse-square-brackets-arguments-lister #'(index ...))))) my code fails at run-time : ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/Users/mattei/AI_Deep_Learning/exo_retropropagationNhidden_layers_matrix_v2_by_vectors4guile+.scm.go ################## NOT ################## *init* : nc=#(1 2 1) z=#(#(0) #(0 0) #(0)) z̃=#(#(0) #(0 0) #(0)) M=#(#<<matrix> 10313c640> #<<matrix> 10313c560>) ᐁ=#(#(0) #(0 0) #(0)) nbiter=5000 0 ice-9/boot-9.scm:1685:16: In procedure raise-exception: In procedure <: Wrong type argument in position 1: #<procedure + (#:optional _ _ . _)> when i look at code , i can use 2 overload mechanism for + , the one of mine (Scheme+) and the one of GOOPS guile, here this one is in use: the other is commented: ;scheme@(guile-user)> {#(1 2) + #(3 4 5)} ;$1 = #(1 2 3 4 5) ;scheme@(guile-user)> {#(1 2) + #(3 4 5) + #(6 7)} ;$2 = #(1 2 3 4 5 6 7) (define-method (+ (x <vector>) (y <vector>)) (vector-append x y)) ;; ; first stage overloading ;; (define-overload-existing-operator +) ;; ; second stage overloading ;; (overload-existing-operator + vector-append (vector? vector?)) i do not understand well macro syntax features of R6RS but now all the code works > > So i keep the code as is. > > for the cloned macro i did not succeed in other solution than duplicating > > the macro and replace <- by ←, stupid but it works now in all codes. > > In fact it is a general question, how to clone a macro? for a procedure > it > > is more simple. > > The simple solution > > (define-syntax-rule (← . args) (<- . args)) > sorry, but this can not works because my macro is defined this way: (define-syntax <- (lambda (stx) (syntax-case stx () ;; silly case ((_ ( ) expr) #'(void)) ;; void is not portable ;'()) ;; one value in values ! ;; > {(x) <- (values 7)} ;; > x ;; 7 ((_ (var) expr) #'(set!-values-plus (var) expr)) etc... other case continues so my arguments are not put in a list as in your definition ok i see it is not define-syntax but define-syntax-rules, first not in R6RS, so not portable ,does not exist in Kawa: #|kawa:1|# define-syntax-rules /dev/tty:1:1: warning - no declaration seen for define-syntax-rules /dev/tty:1:1: unbound location: define-syntax-rules but i test it with my guile code,fails too at run-time: scheme@(guile-user)> (logic-test) test 1 (or (and (not a) (not b) (not c) (not d)) (and (not a) (not b) (not c) d) (and (not a) (not b) c (not d)) (and (not a) b (not c) d) (and (not a) b c (not d)) (and (not a) b c d) (and a (not b) (not c) (not d)) (and a (not b) (not c) d) (and a (not b) c (not d)) (and c (not d))) = ice-9/boot-9.scm:1685:16: In procedure raise-exception: Unbound variable: lin Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue. scheme@(guile-user) [1]> ,bt In /Users/mattei/library-FunctProg/guile/logiki+.scm: 2848:18 5 (_ #<continuation 101c6a500>) 743:23 4 (infix-symb-min-dnf _) 1777:41 3 (minimal-dnf _) 2707:38 2 (_ _) 2526:19 1 (identify-essential-prime-implicants _ _) In ice-9/boot-9.scm: 1685:16 0 (raise-exception _ #:continuable? _) the offending code is here: ;; construction of the array ;; set the left column containing prime implicants (for-basic (lin 0 {lgt-pi - 1}) ;;(display "lin=") (display lin) (newline) ;;(display "{vct-prime-implicants[lin]}=") (display {vct-prime-implicants[lin]}) (newline) ;;(display "{iepi[{lin + 1} 0]}=") (display {iepi[{lin + 1} 0]}) (newline) {iepi[{lin + 1} 0] ← vct-prime-implicants[lin]}) ;;{iepi[{lin + 1} 0] <- vct-prime-implicants[lin]}) ;(display "iepi after") (newline) exactly here, just in the macro: {iepi[{lin + 1} 0] ← vct-prime-implicants[lin]}) in the macro lin is not more binded, so i suppose there is a problem of hygiene, the macro wipe out the binding of lin but it works at REPL,strange ... : 1685:16 0 (raise-exception _ #:continuable? _) scheme@(guile-user) [1]> ,q scheme@(guile-user)> {v <+ (vector 1 2 3 4)} scheme@(guile-user)> {v[1 : 3] <- #(-1 -2 -3 -4 -5 -6 -7)[2 : 4]} <- : #'(index ...) = (#<syntax:unknown file:6:3 1> #<syntax:unknown file:6:5 :> #<syntax:unknown file:6:7 3>) <- : (syntax->datum #'(index ...)) = (1 : 3) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> 1 : 3)> <- : (syntax->datum #'parsed-args)=(list 1 : 3) $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> 2 : 4)> scheme@(guile-user)> v $1 = #(1 -3 -4 4) scheme@(guile-user)> {v[1 : 3] ← #(-1 -2 -3 -4 -5 -6 -7)[2 : 4]} <- : #'(index ...) = (#<syntax:unknown file:8:3 1> #<syntax:unknown file:8:5 :> #<syntax:unknown file:8:7 3>) <- : (syntax->datum #'(index ...)) = (1 : 3) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> 1 : 3)> <- : (syntax->datum #'parsed-args)=(list 1 : 3) $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> 2 : 4)> scheme@(guile-user)> v $2 = #(1 -3 -4 4) scheme@(guile-user)> (define lin 1) scheme@(guile-user)> {v[lin : 3] ← #(-1 -2 -3 -4 -5 -6 -7)[2 : 4]} <- : #'(index ...) = (#<syntax:unknown file:11:3 lin> #<syntax:unknown file:11:7 :> #<syntax:unknown file:11:9 3>) <- : (syntax->datum #'(index ...)) = (lin : 3) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> lin : 3)> <- : (syntax->datum #'parsed-args)=(list lin : 3) $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> 2 : 4)> scheme@(guile-user)> v $3 = #(1 -3 -4 4) and even with a variable ,i defined lin in the example > should really work. Maybe you have several files and you forgot to clear > the bytecode cache? Keep in mind that Guile doesn't do dependency tracking: > if file B uses a macro defined in file A and file A changes, B won't be > recompiled automatically, and will use the expansions from the old macros > until you clear the cache or use --no-auto-compile or similar. This is the > only explanation I can think of for this part of your problem. > i know this caveit, each time i test i remove all the old modules compiled: (base) mattei@mbp-touch-bar ~ % rm -rf .cache/guile/ (base) mattei@mbp-touch-bar ~ % rm -rf .cache/guile/ (base) mattei@mbp-touch-bar ~ % rm -rf .cache/guile/ (base) mattei@mbp-touch-bar ~ % rm -rf .cache/guile/ (base) mattei@mbp-touch-bar ~ % rm -rf .cache/guile/ (base) mattei@mbp-touch-bar ~ % rm -rf .cache/guile/ (base) mattei@mbp-touch-bar ~ % rm -rf .cache/guile/ so the guile compiler find a clean system,output of a compile: note that the compiler find the problem with unbound variables: ;;; /Users/mattei/library-FunctProg/guile/logiki+.scm:2526:19: warning: possibly unbound variable `lin' ;;; /Users/mattei/library-FunctProg/guile/logiki+.scm:2546:18: warning: possibly unbound variable `col' ;;; /Users/mattei/library-FunctProg/guile/logiki+.scm:2554:13: warning: possibly unbound variable `lin-pos-epi' if i no more use your macro it works: GNU Guile 3.0.8.99-f3ea8 Copyright (C) 1995-2022 Free Software Foundation, Inc. Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'. This program is free software, and you are welcome to redistribute it under certain conditions; type `,show c' for details. Enter `,help' for help. scheme@(guile-user)> (load "start-λογικι-guile+.scm") ;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0 ;;; or pass the --no-auto-compile argument to disable. ;;; compiling /Users/mattei/library-FunctProg/start-λογικι-guile+.scm ;;; compiling /usr/local/share/guile/site/3.0/Scheme+.scm ;;; compiling /usr/local/share/guile/site/3.0/for_next_step.scm ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/for_next_step.scm.go ;;; compiling /usr/local/share/guile/site/3.0/growable-vector.scm ;;; growable-vector.scm:149:2: warning: possibly wrong number of arguments to `vector-copy' ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/growable-vector.scm.go ;;; compiling /usr/local/share/guile/site/3.0/infix-operators.scm ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/infix-operators.scm.go ;;; compiling /usr/local/share/guile/site/3.0/overload.scm ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/overload.scm.go ;;; compiling /usr/local/share/guile/site/3.0/array.scm ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/array.scm.go ;;; compiling /usr/local/share/guile/site/3.0/condx.scm ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/condx.scm.go <- : #'(index ...) = (#<syntax:assignment.scm:1288:68 i1> #<syntax:assignment.scm:1288:71 slice> #<syntax:assignment.scm:1288:77 i2>) <- : (syntax->datum #'(index ...)) = (i1 slice i2) ;;; WARNING: compilation of /usr/local/share/guile/site/3.0/Scheme+.scm failed: ;;; Unbound variable: optimizer-parse-square-brackets-arguments-lister <- : #'(index ...) = (#<syntax:assignment.scm:1288:68 i1> #<syntax:assignment.scm:1288:71 slice> #<syntax:assignment.scm:1288:77 i2>) <- : (syntax->datum #'(index ...)) = (i1 slice i2) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> i1 slice i2)> <- : (syntax->datum #'parsed-args)=(list i1 slice i2) ;;; compiling /usr/local/share/guile/site/3.0/operation+.scm ;;; compiling /usr/local/share/guile/site/3.0/set+.scm ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/set+.scm.go ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/operation+.scm.go ;;; compiling /usr/local/share/guile/site/3.0/minterms+.scm ;;; binary-arithmetic.scm:239:2: warning: "~24,'0,':b": wrong port argument ;;; binary-arithmetic.scm:248:3: warning: "~24,' ,':b": wrong port argument ;;; simplify.scm:52:31: warning: possibly unbound variable `zero-symb?' ;;; simplify.scm:115:37: warning: possibly unbound variable `unity-symb?' ;;; binary-arithmetic.scm:257:6: warning: possibly unbound variable `bitwise-and' ;;; binary-arithmetic.scm:271:16: warning: possibly unbound variable `arithmetic-shift' ;;; minterms+.scm:419:17: warning: possibly unbound variable `segment-start' ;;; minterms+.scm:420:15: warning: possibly unbound variable `segment-end' ;;; minterms+.scm:422:31: warning: possibly unbound variable `minterms-vector' ;;; minterms+.scm:425:9: warning: possibly unbound variable `unified-minterms-vector-1' ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/minterms+.scm.go ;;; compiling /usr/local/share/guile/site/3.0/subscript+.scm ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/subscript+.scm.go ;;; compiling /usr/local/share/guile/site/3.0/regex+.scm ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/regex+.scm.go $nfx$ : parsed-args=#<syntax (<- ztest (+ (* 3 5) ztest))> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> $nfx$ : parsed-args=#<syntax (<- zorglub (+ zorglub (* 3 5) 2))> <- : #'(index ...) = (#<syntax:logiki+.scm:2390:34 e>) <- : (syntax->datum #'(index ...)) = (e) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> e)> <- : (syntax->datum #'parsed-args)=(list e) <- : #'(index ...) = (#<syntax:logiki+.scm:2413:17 mt1>) <- : (syntax->datum #'(index ...)) = (mt1) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> mt1)> <- : (syntax->datum #'parsed-args)=(list mt1) <- : #'(index ...) = (#<syntax:logiki+.scm:2414:17 mt2>) <- : (syntax->datum #'(index ...)) = (mt2) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> mt2)> <- : (syntax->datum #'parsed-args)=(list mt2) <- : #'(index ...) = (#<syntax:logiki+.scm:2446:18 e>) <- : (syntax->datum #'(index ...)) = (e) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> e)> <- : (syntax->datum #'parsed-args)=(list e) ← : #'(index ...) = (#<syntax:logiki+.scm:2511:8 0>) ← : (syntax->datum #'(index ...)) = (0) ← : #'parsed-args=#<syntax (#<syntax:assignment.scm:400:64 list> 0)> ← : (syntax->datum #'parsed-args)=(list 0) $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> lin 0)> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> lin col)> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> lin col)> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> 0 col)> ← : #'(index ...) = (#<syntax:logiki+.scm:2554:19 lin-pos-epi> #<syntax:logiki+.scm:2554:31 col>) ← : (syntax->datum #'(index ...)) = (lin-pos-epi col) ← : #'parsed-args=#<syntax (#<syntax:assignment.scm:400:64 list> lin-pos-epi col)> ← : (syntax->datum #'parsed-args)=(list lin-pos-epi col) $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> lin-pos-epi 0)> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> lin 0)> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> 0 col)> ← : #'(index ...) = (#<syntax:logiki+.scm:2546:24 lin> #<syntax:logiki+.scm:2546:28 col>) ← : (syntax->datum #'(index ...)) = (lin col) ← : #'parsed-args=#<syntax (#<syntax:assignment.scm:400:64 list> lin col)> ← : (syntax->datum #'parsed-args)=(list lin col) ← : #'(index ...) = (#<syntax:logiki+.scm:2550:22 lin> #<syntax:logiki+.scm:2550:26 col>) ← : (syntax->datum #'(index ...)) = (lin col) ← : #'parsed-args=#<syntax (#<syntax:assignment.scm:400:64 list> lin col)> ← : (syntax->datum #'parsed-args)=(list lin col) ← : #'(index ...) = (#<syntax:logiki+.scm:2526:19 (#<syntax:logiki+.scm:2526:24 +> #<syntax:logiki+.scm:2526:20 lin> #<syntax:logiki+.scm:2526:26 1>)> #<syntax:logiki+.scm:2526:29 0>) ← : (syntax->datum #'(index ...)) = ((+ lin 1) 0) ← : #'parsed-args=#<syntax (#<syntax:assignment.scm:400:64 list> (+ lin 1) 0)> ← : (syntax->datum #'parsed-args)=(list (+ lin 1) 0) $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> lin)> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> lin col)> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> lin 0)> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> 0 col)> <- : #'(index ...) = (#<syntax:logiki+.scm:3130:21 mt1>) <- : (syntax->datum #'(index ...)) = (mt1) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> mt1)> <- : (syntax->datum #'parsed-args)=(list mt1) <- : #'(index ...) = (#<syntax:logiki+.scm:3131:21 mt2>) <- : (syntax->datum #'(index ...)) = (mt2) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> mt2)> <- : (syntax->datum #'parsed-args)=(list mt2) $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> <- : #'(index ...) = (#<syntax:logiki+.scm:3140:29 i>) <- : (syntax->datum #'(index ...)) = (i) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> i)> <- : (syntax->datum #'parsed-args)=(list i) $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> <- : #'(index ...) = (#<syntax:logiki+.scm:3150:29 i>) <- : (syntax->datum #'(index ...)) = (i) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> i)> <- : (syntax->datum #'parsed-args)=(list i) $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> $nfx$ : parsed-args=#<syntax (<- i (+ i 1))> <- : #'(index ...) = (#<syntax:logiki+.scm:3240:34 i>) <- : (syntax->datum #'(index ...)) = (i) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> i)> <- : (syntax->datum #'parsed-args)=(list i) $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> $nfx$ : parsed-args=#<syntax (<- i (+ i 1))> <- : #'(index ...) = (#<syntax:logiki+.scm:3611:27 i>) <- : (syntax->datum #'(index ...)) = (i) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> i)> <- : (syntax->datum #'parsed-args)=(list i) $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> <- : #'(index ...) = (#<syntax:logiki+.scm:3613:38 i>) <- : (syntax->datum #'(index ...)) = (i) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> i)> <- : (syntax->datum #'parsed-args)=(list i) $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> $nfx$ : parsed-args=#<syntax (<- i (+ i 1))> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> $nfx$ : parsed-args=#<syntax (<- i (+ i 1))> <- : #'(index ...) = (#<syntax:logiki+.scm:3666:13 i>) <- : (syntax->datum #'(index ...)) = (i) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> i)> <- : (syntax->datum #'parsed-args)=(list i) $nfx$ : parsed-args=#<syntax (<- i (+ i 1))> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> $nfx$ : parsed-args=#<syntax (<- i (+ i 1))> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> $nfx$ : parsed-args=#<syntax (<- i (+ i 1))> <- : #'(index ...) = (#<syntax:logiki+.scm:3646:13 i>) <- : (syntax->datum #'(index ...)) = (i) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> i)> <- : (syntax->datum #'parsed-args)=(list i) $nfx$ : parsed-args=#<syntax (<- i (+ i 1))> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> $nfx$ : parsed-args=#<syntax (<- i (+ i 1))> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> i)> $nfx$ : parsed-args=#<syntax (<- i (+ i 1))> <- : #'(index ...) = (#<syntax:logiki+.scm:3620:13 i>) <- : (syntax->datum #'(index ...)) = (i) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> i)> <- : (syntax->datum #'parsed-args)=(list i) $nfx$ : parsed-args=#<syntax (<- i (+ i 1))> $nfx$ : parsed-args=#<syntax (<- i (+ i 1))> $nfx$ : parsed-args=#<syntax (+ (* 3 n) 1)> $nfx$ : parsed-args=#<syntax (+ (* x x x) c)> <- : #'(index ...) = (#<syntax:logiki+.scm:4364:17 mt1>) <- : (syntax->datum #'(index ...)) = (mt1) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> mt1)> <- : (syntax->datum #'parsed-args)=(list mt1) <- : #'(index ...) = (#<syntax:logiki+.scm:4365:17 mt2>) <- : (syntax->datum #'(index ...)) = (mt2) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> mt2)> <- : (syntax->datum #'parsed-args)=(list mt2) $nfx$ : parsed-args=#<syntax (+ (* 3 (quote (1 2 3))) (quote (4 5 6)) (quote (7 8 9)))> $bracket-apply$ : parsed-args=#<syntax (#<syntax:apply-square-brackets.scm:107:57 list> (+ (- (* 2 3) 4) 2))> $nfx$ : parsed-args=#<syntax (+ (* 3 (quote (1 2 3))) (quote (4 5 6)) (quote (7 8 9)))> $nfx$ : parsed-args=#<syntax (<- x (+ 1 x (* 4 5)))> <- : #'(index ...) = (#<syntax:start-λογικι-guile+.scm:225:22 k>) <- : (syntax->datum #'(index ...)) = (k) <- : #'parsed-args=#<syntax (#<syntax:assignment.scm:116:64 list> k)> <- : (syntax->datum #'parsed-args)=(list k) ;;; /Users/mattei/library-FunctProg/start-λογικι-guile+.scm:109:0: warning: shadows previous definition of `length' at /Users/mattei/library-FunctProg/start-λογικι-guile+.scm:108:0 ;;; /Users/mattei/library-FunctProg/start-λογικι-guile+.scm:151:0: warning: shadows previous definition of `area' at /Users/mattei/library-FunctProg/start-λογικι-guile+.scm:142:0 ;;; /Users/mattei/library-FunctProg/start-λογικι-guile+.scm:152:0: warning: shadows previous definition of `area' at /Users/mattei/library-FunctProg/start-λογικι-guile+.scm:142:0 ;;; /Users/mattei/library-FunctProg/start-λογικι-guile+.scm:190:0: warning: shadows previous definition of `qproc-14b99c8e39d8193a' at /Users/mattei/library-FunctProg/start-λογικι-guile+.scm:142:0 ;;; /Users/mattei/library-FunctProg/guile/logiki+.scm:3650:3: warning: possibly unbound variable `openmp' ;;; /Users/mattei/library-FunctProg/guile/logiki+.scm:3650:27: warning: possibly unbound variable `string->pointer' ;;; /Users/mattei/library-FunctProg/guile/logiki+.scm:3670:3: warning: possibly unbound variable `forfunct' ;;; /Users/mattei/library-FunctProg/guile/logiki+.scm:3974:33: warning: possibly unbound variable `parallel-vector-map' ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/Users/mattei/library-FunctProg/start-λογικι-guile+.scm.go create-overloaded-procedure : pred-list = (#<procedure vector? (_)>) funct: #<procedure vector-length (_)> orig-funct: #<procedure length (_)> old-funct: #<procedure length (_)> new-funct: #<procedure new-funct args> create-overloaded-procedure : pred-list = (#<procedure string? (_)>) funct: #<procedure string-length (_)> orig-funct: #<procedure new-funct args> old-funct: #<procedure new-funct args> new-funct: #<procedure new-funct args> create-overloaded-procedure : pred-list = (#<procedure number? (_)>) funct: #<procedure surf-carre-parfait (x)> orig-funct: #<procedure area args-lst> old-funct: #<procedure area args-lst> new-funct: #<procedure new-funct args> create-overloaded-procedure : pred-list = (#<procedure number? (_)> #<procedure number? (_)>) funct: #<procedure surf-carre-long (x y)> orig-funct: #<procedure new-funct args> old-funct: #<procedure new-funct args> new-funct: #<procedure new-funct args> before add-list-list before overload-existing-n-arity-operator create-overloaded-existing-n-arity-operator : pred-list = (#<procedure list? (_)> #<procedure list? (_)>) orig-funct = #<procedure + (#:optional _ _ . _)> funct = #<procedure add-n-lists vn-lst> funct: #<procedure add-n-lists vn-lst> orig-funct: #<procedure + (#:optional _ _ . _)> old-funct: #<procedure + (#:optional _ _ . _)> new-funct: #<procedure new-funct args> replace-operator! : (0 (#<procedure expt (_ _)> #<procedure expt (_ _)>) (#<procedure * (#:optional _ _ . _)> #<procedure / (#:optional _ _ . _)> #<procedure modulo (_ _)>) (#<procedure + (#:optional _ _ . _)> #<procedure - (#:optional _ _ . _)>) (#<procedure << (x n)> #<procedure >> (x n)>) (#<procedure logand (#:optional _ _ . _)> #<procedure logior (#:optional _ _ . _)>) (#<procedure < (#:optional _ _ . _)> #<procedure > (#:optional _ _ . _)> #<procedure = (#:optional _ _ . _)> #<procedure ≠ (x y)> #<procedure <= (#:optional _ _ . _)> #<procedure >= (#:optional _ _ . _)>)) (1 (#<procedure expt (_ _)> #<procedure expt (_ _)>) (#<procedure * (#:optional _ _ . _)> #<procedure / (#:optional _ _ . _)> #<procedure modulo (_ _)>) (#<procedure new-funct args> #<procedure - (#:optional _ _ . _)>) (#<procedure << (x n)> #<procedure >> (x n)>) (#<procedure logand (#:optional _ _ . _)> #<procedure logior (#:optional _ _ . _)>) (#<procedure < (#:optional _ _ . _)> #<procedure > (#:optional _ _ . _)> #<procedure = (#:optional _ _ . _)> #<procedure ≠ (x y)> #<procedure <= (#:optional _ _ . _)> #<procedure >= (#:optional _ _ . _)>)) before mult-num-list create-overloaded-existing-operator : pred-list = (#<procedure number? (_)> #<procedure list? (_)>) funct: #<procedure mult-num-list (k v)> orig-funct: #<procedure * (#:optional _ _ . _)> old-funct: #<procedure * (#:optional _ _ . _)> new-funct: #<procedure new-funct args> replace-operator! : (1 (#<procedure expt (_ _)> #<procedure expt (_ _)>) (#<procedure * (#:optional _ _ . _)> #<procedure / (#:optional _ _ . _)> #<procedure modulo (_ _)>) (#<procedure new-funct args> #<procedure - (#:optional _ _ . _)>) (#<procedure << (x n)> #<procedure >> (x n)>) (#<procedure logand (#:optional _ _ . _)> #<procedure logior (#:optional _ _ . _)>) (#<procedure < (#:optional _ _ . _)> #<procedure > (#:optional _ _ . _)> #<procedure = (#:optional _ _ . _)> #<procedure ≠ (x y)> #<procedure <= (#:optional _ _ . _)> #<procedure >= (#:optional _ _ . _)>)) (2 (#<procedure expt (_ _)> #<procedure expt (_ _)>) (#<procedure new-funct args> #<procedure / (#:optional _ _ . _)> #<procedure modulo (_ _)>) (#<procedure new-funct args> #<procedure - (#:optional _ _ . _)>) (#<procedure << (x n)> #<procedure >> (x n)>) (#<procedure logand (#:optional _ _ . _)> #<procedure logior (#:optional _ _ . _)>) (#<procedure < (#:optional _ _ . _)> #<procedure > (#:optional _ _ . _)> #<procedure = (#:optional _ _ . _)> #<procedure ≠ (x y)> #<procedure <= (#:optional _ _ . _)> #<procedure >= (#:optional _ _ . _)>)) define-overload-operator : proc =#<procedure *b args-lst> 16 (14 19 24) 5 V=#(-1 -1 -1 -1 -1 -1 #<unspecified> #<unspecified> #<unspecified> #<unspecified>) scheme@(guile-user)> (logic-test) test 1 (or (and (not a) (not b) (not c) (not d)) (and (not a) (not b) (not c) d) (and (not a) (not b) c (not d)) (and (not a) b (not c) d) (and (not a) b c (not d)) (and (not a) b c d) (and a (not b) (not c) (not d)) (and a (not b) (not c) d) (and a (not b) c (not d)) (and c (not d))) = ((¬a ∧ b ∧ d) ∨ (¬b ∧ ¬c) ∨ (c ∧ ¬d)) EXACT test 2 (or (and (not a) (not b) (not c) (not d)) (and (not a) (not b) (not c) d) (and (not a) (not b) c (not d)) (and (not a) b (not c) d) (and (not a) b c (not d)) (and (not a) b c d) (and a (not b) (not c) (not d)) (and a (not b) (not c) d) (and a (not b) c (not d)) (and c (not d))) = ((¬a ∧ b ∧ d) ∨ (¬b ∧ ¬c) ∨ (c ∧ ¬d)) EXACT test 3 (or (and (and A B) (not (and C (or (and A (not B)) (and (not A) B))))) (and (not (and A B)) (and C (or (and A (not B)) (and (not A) B))))) = ((A ∧ B) ∨ (A ∧ C) ∨ (B ∧ C)) EXACT test 4 (⊕ (· B1 B0) (· C1 (⊕ B1 B0))) = ((B0 ∧ B1) ∨ (B0 ∧ C1) ∨ (B1 ∧ C1)) EXACT test 5 (or (and B3 (or B2 (and (not B12) B3))) (and B4 (or B2 (and (not B12) B3)))) = (or (and B2 B3) (and B2 B4) (and B3 (not B12))) EXACT test 6 (or (and (not a) (not b) (not c) (not d)) (and (not a) (not b) (not c) d) (and (not a) (not b) c (not d)) (and (not a) b (not c) d) (and (not a) b c (not d)) (and (not a) b c d) (and a (not b) (not c) (not d)) (and a (not b) (not c) d) (and a (not b) c (not d)) (and c (not d))) = ((¬a ∨ ¬b ∨ c) ∧ (¬a ∨ ¬b ∨ ¬d) ∧ (¬a ∨ ¬c ∨ ¬d) ∧ (b ∨ ¬c ∨ ¬d) ∧ (¬b ∨ c ∨ d)) EXACT test 7 (or (and (and A B) (not (and C (or (and A (not B)) (and (not A) B))))) (and (not (and A B)) (and C (or (and A (not B)) (and (not A) B))))) = (or (and A B C) (and A B (not C)) (and A (not B) C) (and (not A) B C)) EXACT test 8 (or (and B₃ (or B₂ (and (not B₁₂) B₃))) (and B₄ (or B₂ (and (not B₁₂) B₃)))) = (or (and B₂ B₃) (and B₂ B₄) (and B₃ (not B₁₂))) EXACT $1 = #t but there is sill false warnings in guile in the output: > ;;; WARNING: compilation of /usr/local/share/guile/site/3.0/Scheme+.scm > failed: > ;;; Unbound variable: optimizer-parse-square-brackets-arguments-lister > without Scheme+ and optimizer-parse-square-brackets-arguments-lister the code would fail at startup as you say perheaps eval-when can help : https://www.gnu.org/software/guile/manual/html_node/Eval-When.html but i do not know how,and again this not portable , i have not port this part of code to Kawa or Racket (problem is different Kawa have no curly infix mode and Racket ,i use a #lang reader but i have a mode to emulate SRFI 105 only parser without scheme+ features) for now all my code : logic computation, deep learning example, and another private one works with the latest version of Scheme+ , so as it runs again on more that 10000 lines of code i think it is stable enought to release it soon after a few more tests. There is no new features, i just migrate a lot of parser features in the macro system so it should run all code in curly-mode without no more need to parse code in command line. best wishes, Damien > Jean > > >