From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Damien Mattei Newsgroups: gmane.lisp.guile.user Subject: Re: 2 macros in one expression Date: Sat, 15 Apr 2023 16:45:53 +0200 Message-ID: References: <4187fdcf-5bee-8e9d-3ec1-19cc55e36fc3@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="19434"; mail-complaints-to="usenet@ciao.gmane.io" Cc: guile-user@gnu.org To: Matt Wette Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Sat Apr 15 16:46:57 2023 Return-path: Envelope-to: guile-user@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pnhB1-0004tB-Vn for guile-user@m.gmane-mx.org; Sat, 15 Apr 2023 16:46:56 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pnhAH-00084H-S2; Sat, 15 Apr 2023 10:46:09 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pnhAG-000844-HU for guile-user@gnu.org; Sat, 15 Apr 2023 10:46:08 -0400 Original-Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pnhAE-0005H6-8f for guile-user@gnu.org; Sat, 15 Apr 2023 10:46:08 -0400 Original-Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-94f1d0d2e03so23760466b.0 for ; Sat, 15 Apr 2023 07:46:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681569964; x=1684161964; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=dwHH0MFZhUiUXMs3xpZ5/lo+YAMWi/zq1KJ/KuHyGHc=; b=IYGmgCCM1DqQhhRvQKNGx2+jnGgE8QsuZLC79G8bLDEsKjbzIhqYtO/uN/Wqd5uJG+ 0IetInQnm6wgPJ+7L/hMrkQ99yyecQM3dSJ7Gmz/+Fsa8meFet79L3P+R/7byH8IHE/I tKQ6B5J61xn8v8Uwj3BTcBs3f7VPvZDkALLmbzkbvQ3oWPvgXmBwDYY7E3XzTLZvBWeJ i+bDbq7/2afLC4/ElVWZ1ljDK85viBJryKXrHBURIJSDa28n/xP+h3GXnuLo781cxP5X qrLpyN+4ZpfEav36fImyGYaNsT0tFO6cgSEqg5LpX5iX0VmWo6P5Htd2W8iMAw7u0GuB ehAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681569964; x=1684161964; h=cc: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=dwHH0MFZhUiUXMs3xpZ5/lo+YAMWi/zq1KJ/KuHyGHc=; b=WjpBzbkgLvLt8KUomtZ6m4p5be3BMM4ND155nX1eJs/2AIZ9aJpX+dQ8ccGkXU06Sy pfMoWt9JDBBpzDIRNCdGOz5LPkTdKpxAXNmrTNcSc3pjDC2GQQ3/PgmFyNO4jbIWPyjW Z/KCiFwNfkTfX/5F2SnJA+F+s9pvoMMUnc9S5C4jMcjdVPINWBk4XpBtQnOX02dCPO7T vpPXtqLt558lQYcrx03SaHG1p1uvoetFPU7PF4yCupnwJBmH0hbSflLurEfHwwAATRTj vHkZ1hRQHIjDcJyfLNY2O9DMG2EJem3u/9qyv07bMEhzBhCGJ8sp3mmcAvOYXl7s6yki 3hyA== X-Gm-Message-State: AAQBX9fUA8f3Qvc90qisRGd3+fpRYJL4xJA3tvMrGOh4MgsIWS2g9zgh mrAITTHbQpuwLe7O2ODtocIV1NpJ2/aN4yodqbBwGNfAiB4= X-Google-Smtp-Source: AKy350bX1DsHsJzmz9ioK2To/ZQW60hH9u6hoJjRSTc2NpykTYQDIU/tbsQP7q5h0KA+ww+zQGEgweXqzjesnc0zfw4= X-Received: by 2002:a50:baec:0:b0:4fa:d8aa:74ad with SMTP id x99-20020a50baec000000b004fad8aa74admr4681391ede.8.1681569964458; Sat, 15 Apr 2023 07:46:04 -0700 (PDT) In-Reply-To: Received-SPF: pass client-ip=2a00:1450:4864:20::635; envelope-from=damien.mattei@gmail.com; helo=mail-ej1-x635.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Original-Sender: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.lisp.guile.user:18963 Archived-At: my problem is solved by quoting the variable that CAN store a special form (example: <-) and forcing its evaluation ! : (eval (quote opspecial) (interaction-environment)) here is my 'else clause: (else (! ident (eval (quote opspecial) (current-namespace)) term1 op term2)))))) for Racket, in Guile , not tested but it should be: (else (! ident (eval (quote opspecial) (interaction-environment)) term1 op term2)))))) again the else clause WILL NEVER be evaluated with opspecial being a special form but it is always expanded and that was enought to make an error. I admit reading Kent Dybvig article on macro and with a good scheme (as Guile) that implement some special feature of the article and it should exist a more elegant solution than : (eval (quote opspecial) (interaction-environment)) quoting with immediate evaluation ! :-/ Damien On Sat, Apr 15, 2023 at 4:18=E2=80=AFPM Damien Mattei wrote: > yes i tried it, i often get this answer :-) with this sort of problem i > recurrent have with macros and it never helps ,at the point i never > understood what is the use of this option in syntax-rules. > > My error i think was to forget the expansion stage of macro expansion tha= t > is always done for all the macros used in an expression at any level, eve= n > if the code is not used in a branch of 'if ,'cond or other conditional th= e > macros will be expansed. > > I will quote the <- in the opspecial and tried to eval it later, the > problem is with eval which is not really normalised between all > implementations of scheme concerning its environment of evaluation. > I will post the result. > The problem was also that in an infix evaluator i wanted to be able to > evaluate all procedure (that is ok) and all the macro too which is not > always possible with the evaluation technique i use ,it is hard to write = an > infix evaluator with precedence in the language itself.But the problem > arise only with the special forms, so first i quoted them all but then i > can not find the difference in the language with '(sin 30) a procedure ca= ll > and '(1 2 3) a list when evealuating it is has sense for (sin 30) but no= t > for (1 2 3) then i removed all quotation and the macro problem arise... > just after i added some overloading functionalities in my Scheme+ when > using abstract types the evaluation of abstract object (list) with for > example the + operator overloaded became a problem. > Damien > > On Sat, Apr 15, 2023 at 3:50=E2=80=AFPM Matt Wette = wrote: > >> Did you try using the following? >> >> (define-syntax $nfx$ >> (syntax-rules (<-) >> ((... >> >> >> On 4/14/23 4:02 AM, Damien Mattei wrote: >> > hello, >> > >> > i have 2 macros used in one expression like this: >> > scheme@(guile-user)> (define i 2) >> > scheme@(guile-user)> {i <- i + 1} >> > and i got this error: >> > While compiling expression: >> > Syntax error: >> > unknown location: source expression failed to match any pattern in for= m >> <- >> > >> > i use SRFI-105 so : >> > '{i <- i + 1} expand in: >> > ($nfx$ i <- i + 1) >> > >> > and i'm expecting $nfx$ to be called but none of this happens: >> > scheme@(guile-user)> ($nfx$ i <- i + 1) >> > While compiling expression: >> > Syntax error: >> > unknown location: source expression failed to match any pattern in for= m >> <- >> > >> > it seems to be the <- macro and i do not understand why? >> > >> > any idea? >> > >> > macros are defined like this for the beginning: >> > ;; from file assignment.scm >> > (define-syntax <- >> > >> > (syntax-rules () >> > ;; special form like : (<- ($bracket-apply$ T 3) ($bracket-apply= $ >> T 4)) >> > >> > ;; one dimension array, example: {a[4] <- 7} >> > ;; $bracket-apply$ is from SRFI 105 bracket-apply is an argument >> of >> > the macro >> > ((_ (bracket-apply container index) expr) >> > >> > .... >> > >> > ;; from file scheme-infix.scm >> > (define-syntax $nfx$ >> > (syntax-rules () >> > >> > ((_ ident opspecial term1 op term2) (cond ((or (equal? (quote >> > opspecial) (quote <-)) (equal? (quote opspecial) (quote =E2=86=90))) >> > (begin >> > (display "$nfx$") (newline) >> > (opspecial ident (op term1 term2)))) ;; {ident <- {term1 op term2}} >> > >> > ... >> > >> > >> > it is in a module like this: >> > >> > (define-module (Scheme+) >> > >> > #:use-module (growable-vector) >> > #:use-module (srfi srfi-69) ;; Basic hash tables >> > #:use-module (srfi srfi-31) ;; rec >> > #:export ($nfx$ def $bracket-apply$ <- =E2=86=90 -> =E2=86=92 <+ = =E2=A5=86 +> =E2=A5=85 declare $ & >> condx >> > <> =E2=89=A0 ** =E2=87=9C =E2=87=9D repeat) >> > #:replace (do when unless)) >> > >> > >> > >> > (include-from-path "def.scm") >> > (include-from-path "array.scm") >> > (include-from-path "set-values-plus.scm") >> > (include-from-path "apply-square-brackets.scm") >> > (include-from-path "assignment.scm") >> > (include-from-path "declare.scm") >> > (include-from-path "condx.scm") >> > (include-from-path "block.scm") >> > (include-from-path "not-equal.scm") >> > (include-from-path "exponential.scm") >> > (include-from-path "while-do-when-unless.scm") >> > (include-from-path "repeat-until.scm") >> > (include-from-path "scheme-infix.scm") >> > >> > if it can help. >> > >> > Regards, >> > Damien >> >