From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk1-x731.google.com (mail-qk1-x731.google.com [IPv6:2607:f8b0:4864:20::731]) by sourceware.org (Postfix) with ESMTPS id 05959385841F for ; Sat, 13 Apr 2024 22:58:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 05959385841F 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 05959385841F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::731 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713049129; cv=none; b=oFgHXyoH0NEE86r9r+3Jdput+en/c3wELZUYPrRJhhgHujeWQki1WCJlsxmC1FX0MADVrrITV/2IGBAsKNBIea3YHB2X1z4LTz7rLBI/e2DjXaO8BjwzFFsLRIhD1ETTcQ4RB4u+H3aQKAFWmLnxNXwsfNUZ9zARJ9booZ9oeBw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713049129; c=relaxed/simple; bh=WCEi9vWhwyEMXkfmzkQWivAub3A5QM0ZtCquayFyOAo=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=iMDwkUmqLotTuXvPB+Ojazx1Pq+0IbaH93jFSWTXk+2XhD3uKEn3bwxTpLwEke6vPI+o+Mx0qTblnWRtSw1J9/xlA1E62PanI08ab/ySw0Fraro77XZg1s/0US5UtuFSr6PRLoaxHIORReyv1c+ayUmN51M7pC2SRidIvsx5LmU= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-qk1-x731.google.com with SMTP id af79cd13be357-78edc3e80e6so46211485a.2 for ; Sat, 13 Apr 2024 15:58:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713049126; x=1713653926; darn=sourceware.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=+/FSMpyPaXw91ZQCBJ5jqGHaKDms5HnoyHuKhBnUy/Y=; b=Oh6mGhaKR3URBA/7IibgoFQs2Dw406zikOyd+9XO3SA5tVRWvQ8sSK05751Iw3t1f+ dj8UNrSGFvx7+U3Z7FviEr1XMV88FrzvHWYTdQSjmvxnrkTzyttIqmZnGotM/czmkSOM ZcmZU9hM2Jbw34JE8V5OIERbffzAzAC/6zjnIdryZpbkXX0X8bIvQnfy4WXzz8k1fQWI fnNTW+JI25RWcfIftSfH5M5Bm7qoKr8iko7TRDoiH0cdqC7wN1Deej1bhnCMEjW4cwh2 se4U0DAICbHauGbXqQZWvxHjTv4KTY6ThobdXRkF0K6QhbEoWkEFh4Fb3hATCbVuRFv6 MZPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713049126; x=1713653926; 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=+/FSMpyPaXw91ZQCBJ5jqGHaKDms5HnoyHuKhBnUy/Y=; b=Hr0guL/ql6Kv8ZCei4IwT5RCCHe71T3BRBtPA/fdFhew10zeTusg2XMC4VyqR8MgmC QdV52cbv4+aeTkr8wM3FZvHmV336EqYYAV0soUE9IQin5E4AeFruZZlwcfvJGISoxSXl ArooCF+yQx0nzsl7VulcV27EG243jLHCUCQwc6vbPe+ym0VwKh+Uk0zGopTiyJIJAwLg dShjkYzCfkdi98lgS+bpdfIAhkBVLkJkSwCoaFLA5MJKasedMVNyXb6GXVlnMZZY3lPa 8nkG8Kl+SS98PiY/rvaoQhtKGp83lmCKCpD9NNlS502dIcqnQpE+Sqdl7LcCYWJo5Kdv Qxcw== X-Gm-Message-State: AOJu0YzDIjN8xMkIBteVkJv2X1KkWEyCg+2dRZTIAx0u8vTPmlQK9DRO KvEEQdgWObXkuAQfoujB1WuCPF4875BTyX0vaSpYGi9Rg+yM9odQanDzMGd5SZBu84Dj0kix5Km Ca0+7o3ZzxlawMi/776+C0nY7PYs457w7 X-Google-Smtp-Source: AGHT+IF6OydsG46lzzRpKJwlFKAMWNq31LA3DUu7LN0r7b8uvHMkuRFD9TiUjgl7Ky7Qe4KOV9BPIa+HF+SlNWmoP0A= X-Received: by 2002:ad4:458d:0:b0:69b:6bc0:7d35 with SMTP id x13-20020ad4458d000000b0069b6bc07d35mr1599502qvu.2.1713049125834; Sat, 13 Apr 2024 15:58:45 -0700 (PDT) MIME-Version: 1.0 References: <2dec7074-c846-413c-a247-18bae45813d7@bothner.com> In-Reply-To: From: Damien Mattei Date: Sun, 14 Apr 2024 00:58:34 +0200 Message-ID: Subject: Re: how to know if a variable is defined To: Per Bothner Cc: kawa mailing list Content-Type: multipart/alternative; boundary="000000000000a0d9990616025498" X-Spam-Status: No, score=-0.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP 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: --000000000000a0d9990616025498 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable just a few add, it has nothing to see with module,the same behavior happens at REPL and toplevel: #|kawa:1|# (define-syntax defined-symbol? #|.....2|# (syntax-rules () #|.....3|# ((_ x) (call-with-current-continuation #|.....4|# (lambda (exit) #|.....5|# (with-exception-handler #|.....6|# (lambda (e) #|.....7|# (display "defined-symbol? : undefined") (newline) #|.....8|# (exit #f)) ; eval failed =3D> not defined #|.....9|# (lambda () #|....10|# (eval x (interaction-environment)) #|....11|# #t))))))) ; eval suceeded =3D> defined #|kawa:12|# (define-syntax if-defined #|.....13|# (lambda (stx) #|.....14|# (syntax-case stx () #|.....15|# ((_ id iftrue iffalse) #|.....16|# (let ((where (defined-symbol? #'id))) ;;(quote id)))) #|.....17|# (display "if-defined : where=3D") (display where) (newline) #|.....18|# (display "id=3D") (display #'id) (newline) #|.....19|# (if where #'iftrue #'iffalse)))))) #|kawa:20|# (define-syntax <- #|.....21|# (lambda (stx) #|.....22|# #|.....23|# (syntax-case stx () #|.....24|# #|.....25|# ((_ var expr) #|.....26|# #|.....27|# #`(if-defined var #|.....28|# (set! var expr) #|.....29|# (define var expr)))))) #|kawa:30|# (define (foo) #|.....31|# (define expr2 '()) #|.....32|# #|.....33|# (<- expr2 7)) defined-symbol? : undefined if-defined : where=3D#f id=3Dexpr2 /dev/tty:33:7: duplicate declaration of 'expr2' /dev/tty:31:11: (this is the previous declaration of 'expr2') On Sun, Apr 14, 2024 at 12:45=E2=80=AFAM Damien Mattei wrote: > hello, > > i ported my code from guile that use ,as you say it 'exceptions': > > ;; #|kawa:57|# > ;; #|kawa:58|# (define r 2) > ;; #|kawa:59|# (if-defined r 'defined (define r 7)) > ;;if-defined : where=3D#t > ;; id=3Dr > ;; (if-defined r 'defined (define r 7)) > ;; defined > ;; #|kawa:60|# r > ;; 2 > ;; #|kawa:61|# (defined-symbol? r) > ;; #t > ;; #|kawa:62|# (defined-symbol? t) > ;; /dev/tty:62:18: warning - no declaration seen for t > ;; defined-symbol? : undefined > ;; #f > ;; #|kawa:63|# (let ((k 7)) (defined-symbol? k)) > ;; #t > ;; > > (define-syntax defined-symbol? > (syntax-rules () > ((_ x) (call-with-current-continuation > (lambda (exit) > (with-exception-handler > (lambda (e) > (display "defined-symbol? : undefined") (newline) > (exit #f)) ; eval failed =3D> not defined > (lambda () > (eval x (interaction-environment)) > #t))))))) ; eval suceeded =3D> defined > > > ;; #|kawa:86|# (define k 0) > ;; #|kawa:87|# (let loop () (if (< k 4) (let () (display k) (newline) (<- > k (+ k 1)) (loop)))) > ;; if-defined : where=3D#t > ;; id=3Dk > ;; 0 > ;; 1 > ;; 2 > ;; 3 > ;; #|kawa:88|# (let () (define k 0) (let loop () (if (< k 4) (let () > (display k) (newline) (<- k (+ k 1)) (loop))))) > ;; if-defined : where=3D#t > ;; id=3Dk > ;; 0 > ;; 1 > ;; 2 > ;; 3 > ;; #|kawa:89|# (let () (define s 0) (let loop () (if (< s 4) (let () > (display s) (newline) (<- s (+ s 1)) (loop))))) > ;; if-defined : where=3D#t > ;; id=3Ds > ;; 0 > ;; 1 > ;; 2 > ;; 3 > ;; #|kawa:90|# (let ((s 0)) (let loop () (if (< s 4) (let () (display s) > (newline) (<- s (+ s 1)) (loop))))) > ;; if-defined : where=3D#t > ;; id=3Ds > ;; 0 > ;; 1 > ;; 2 > ;; 3 > > (define-syntax if-defined > (lambda (stx) > (syntax-case stx () > ((_ id iftrue iffalse) > (let ((where (defined-symbol? #'id))) ;;(quote id)))) > (display "if-defined : where=3D") (display where) (newline) > (display "id=3D") (display #'id) (newline) > (if where #'iftrue #'iffalse)))))) > > i use the code in conjunction with this macro: > (define-syntax <- > (lambda (stx) > > (syntax-case stx () > > #`(if-defined var > (set! var expr) > (define var expr)))))) > > it works better than guile (guile fails on the let () tests...: > scheme@(guile-user)> (let ((k 0)) (let loop () (if (< k 4) (let () > (display k) (newline) (<- k (+ k 1)) (loop))))) > defined-symbol? : undefined > if-defined : where=3D#f > id=3D# > # > ice-9/boot-9.scm:1685:16: In procedure raise-exception: > In procedure +: Wrong type argument in position 1: # > > Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue. > > ), as you can see the examples , but in some place of my code kawa fails > too, i made a simplified example from the whole code: > > for example if i put all the stuff in a module test-defined.scm: > > (module-name test-defined) > > (export foo) > > > > (define-syntax defined-symbol? > (syntax-rules () > ((_ x) (call-with-current-continuation > (lambda (exit) > (with-exception-handler > (lambda (e) > (display "defined-symbol? : undefined") (newline) > (exit #f)) ; eval failed =3D> not defined > (lambda () > (eval x (interaction-environment)) > #t))))))) ; eval suceeded =3D> defined > > (define-syntax if-defined > (lambda (stx) > (syntax-case stx () > ((_ id iftrue iffalse) > (let ((where (defined-symbol? #'id))) ;;(quote id)))) > (display "if-defined : where=3D") (display where) (newline) > (display "id=3D") (display #'id) (newline) > (if where #'iftrue #'iffalse)))))) > > > > (define-syntax <- > (lambda (stx) > > (syntax-case stx () > > ((_ var expr) > > #`(if-defined var > (set! var expr) > (define var expr)))))) > > > > > (define (foo) > (define expr2 '()) > > (<- expr2 7)) > > then it fails: > > #|kawa:1|# (require test-defined)defined-symbol? : undefined > if-defined : where=3D#f > id=3Dexpr2 > (require test-defined) > /Users/mattei/Scheme-PLUS-for-Kawa/test-defined.scm:95:7: duplicate > declaration of 'expr2' > /Users/mattei/Scheme-PLUS-for-Kawa/test-defined.scm:93:11: (this is the > previous declaration of 'expr2') > > it finds that expr2 is not defined,then expand a (define expr2 ...) but > then cause an error of duplicate declaration of expr2 > > > On Thu, Apr 11, 2024 at 3:01=E2=80=AFAM Per Bothner wro= te: > >> >> >> On 4/10/24 14:49, Damien Mattei via Kawa wrote: >> > hello, >> > >> > is there a way to know if a variable is defined in Kawa? >> > >> > (like 'identifier-binding' in Racket) >> >> If you need to know if a variable is bound in the dynamic environment, >> you could perhaps use eval wrapped in an exception handler. >> >> There are probably better ways, but I don't remember off-hand. >> >> Can't think of anything to use if you need information about lexical >> bindings. >> I supposed you could implemented identifier-binding or something similar. >> >> -- >> --Per Bothner >> per@bothner.com http://per.bothner.com/ >> > --000000000000a0d9990616025498--