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: Fri, 14 Apr 2023 21:36:50 +0200 Message-ID: References: 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="18836"; mail-complaints-to="usenet@ciao.gmane.io" To: guile-user Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Fri Apr 14 21:37:41 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 1pnPEq-0004na-Sm for guile-user@m.gmane-mx.org; Fri, 14 Apr 2023 21:37:40 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pnPEJ-0005q0-NU; Fri, 14 Apr 2023 15:37:07 -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 1pnPEI-0005pl-7p for guile-user@gnu.org; Fri, 14 Apr 2023 15:37:06 -0400 Original-Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pnPEF-0004lj-VJ for guile-user@gnu.org; Fri, 14 Apr 2023 15:37:06 -0400 Original-Received: by mail-ej1-x634.google.com with SMTP id xi5so48243512ejb.13 for ; Fri, 14 Apr 2023 12:37:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681501021; x=1684093021; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=3FdzXzKQe0DVi0fVNmVtBC48x+JnbC24LJ4lVkv5YrU=; b=VuUAZPpkuTeM9qhTMRtBnP6aLxleNwse818HfgnqOrnpVW3NUG6Wkw4m4gpbX4IptX fLB1SAtzZ5OMoTx3Py2+uCI1khwqsDkf6vo8vnUvy7hTQmfc8Ki1zjkEN1P+Rq1F49Xd qMi1NwQtPYoiwy/xslNYnNGLwMUJadgz8S0rYVNlQykgCfC956UfmuhoszVsLR3tNGQC Rk953Q1gnlo8UjttsfwhIxpUYW7FvI76VOIvK1V/6js4hanGcgnitOe/ABg+p13gLvzs 5aAwkx6otjGrEJLJqRTPlPtRajuS7rFI7bPc9AFRfcxoxSmoO2OlnrYiMDbmMUkmK/NH uXIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681501021; x=1684093021; h=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=3FdzXzKQe0DVi0fVNmVtBC48x+JnbC24LJ4lVkv5YrU=; b=hriMMNdkgmx8KccROm6CoI1lVpxlc0rjVX5LhFyDhFPm0s15M0vwc02qFXxEvg+2KU D6qmeRrIW//jgf6InjO8omZNakFtzl113M1R+dX7rVJ4vpqxusuPwwzt4keMg7rjKwfC D1ZAsOGmkxoUwtHzzVdpKv5lUNVCkltkd8A9j1oqOdGui9q4IFrkmUAq1w9TCrQ5akXY 16vAyLQn2oUSklh2q79mCU5h1EBjnLm2Kg7N7aqxsTkO3Taejh3A+VZj9HA4+qRxHzO0 pEwmTvnxavlAExQLu0/hmSkpC7Lfi7z2mA0ZXp6qQHZJ5YcBVjHO1XTr+sGN0owPeGak lJ+g== X-Gm-Message-State: AAQBX9fjs1R3+/+3h8i7+SXZw7lGNYSSSEtEgySgSbrpbgxYOZuVCGcv By6lkt+wZV9JeXBYuC3RvmpaaW1qAcNsFJvkWPJ7+xBd508= X-Google-Smtp-Source: AKy350YfSn07+twwVmm6cYlpoDpQTCogWgA3mlJfKYYlokV80pYBajaLeQFpDPbeM/gpjHGztYBho3BoWoudkvUWjY0= X-Received: by 2002:a17:906:55a:b0:94e:fd2c:f829 with SMTP id k26-20020a170906055a00b0094efd2cf829mr116756eja.2.1681501021350; Fri, 14 Apr 2023 12:37:01 -0700 (PDT) In-Reply-To: Received-SPF: pass client-ip=2a00:1450:4864:20::634; envelope-from=damien.mattei@gmail.com; helo=mail-ej1-x634.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, T_SCC_BODY_TEXT_LINE=-0.01 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:18960 Archived-At: i test my previous problem both with Racket and Guile, it gave the same error , i isolated the problem out of SRFI 105 ,so it is not related to SRFI 105, here is a simple code to test: (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} ((or (equal? (quote op) (quote ->)) (equal? (quote op) (quote =E2=86= =92))) (op term2 (opspecial ident term1))) ;; Warning: argument names of macro do not reprensent the values contained in this case ;;(else (! (quote ident) (quote opspecial) (quote term1) (quote op) (quote term2))))) (else (! ident opspecial term1 op term2)))))) (define-syntax <- (syntax-rules () ((_ var expr) (begin ;;(display "<- : variable set!") (newline) (set! var expr) var)))) (define i 3) > ($nfx$ i <- i + 1) <-: bad syntax in: <- it works only if i change the last line of $nfx$: (else (! ident (quote opspecial) term1 op term2)))))) note: ! which is a procedure is not defined in this example On Fri, Apr 14, 2023 at 4:49=E2=80=AFPM Damien Mattei wrote: > i have found that the error is related with this : > > (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} > > ((or (equal? (quote op) (quote ->)) (equal? (quote op) (quote =E2=86= =92))) > (op term2 (opspecial ident term1))) ;; Warning: argument names of macro d= o > not reprensent the values contained in this case > > (else (! ident (quote opspecial) term1 op term2)))) > > this code works: > scheme@(guile-user)> (define i 2) > scheme@(guile-user)> {i <- i + 1} > $nfx$ > 3 > > but if i change the last line of the else clause by removing the quote of > opspecial: > (else (! ident opspecial term1 op term2)))) > > it will fail: > > scheme@(guile-user)> {i <- i + 1} > While compiling expression: > Syntax error: > unknown location: source expression failed to match any pattern in form <= - > > i understand the problem is with opspecial equal in this example to the > special form <- but what i do not understand is why the code is then goi= ng > to the else clause as i know that previously it was on the same example > evaluating the first clause: > (begin > (display "$nfx$") (newline) > (opspecial ident (op term1 term2)))) ;; {ident <- term1 op term2} > > ??? > > On Fri, Apr 14, 2023 at 1:02=E2=80=AFPM 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 form = <- >> >> 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 form = <- >> >> 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 >> >