* how to know if a variable is defined
@ 2024-04-10 21:49 Damien Mattei
2024-04-11 1:00 ` Per Bothner
0 siblings, 1 reply; 6+ messages in thread
From: Damien Mattei @ 2024-04-10 21:49 UTC (permalink / raw)
To: kawa mailing list
[-- Attachment #1: Type: text/plain, Size: 121 bytes --]
hello,
is there a way to know if a variable is defined in Kawa?
(like 'identifier-binding' in Racket)
regards,
damien
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: how to know if a variable is defined
2024-04-10 21:49 how to know if a variable is defined Damien Mattei
@ 2024-04-11 1:00 ` Per Bothner
2024-04-11 9:51 ` Lassi Kortela
2024-04-13 22:45 ` Damien Mattei
0 siblings, 2 replies; 6+ messages in thread
From: Per Bothner @ 2024-04-11 1:00 UTC (permalink / raw)
To: Damien Mattei, kawa mailing list
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/
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: how to know if a variable is defined
2024-04-11 1:00 ` Per Bothner
@ 2024-04-11 9:51 ` Lassi Kortela
2024-04-13 22:45 ` Damien Mattei
1 sibling, 0 replies; 6+ messages in thread
From: Lassi Kortela @ 2024-04-11 9:51 UTC (permalink / raw)
To: Per Bothner, Damien Mattei, kawa mailing list
"Get value of symbol" is a common newbie question in Lisp. In every case
a better solution is apparent once the complete problem is explained.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: how to know if a variable is defined
2024-04-11 1:00 ` Per Bothner
2024-04-11 9:51 ` Lassi Kortela
@ 2024-04-13 22:45 ` Damien Mattei
2024-04-13 22:58 ` Damien Mattei
1 sibling, 1 reply; 6+ messages in thread
From: Damien Mattei @ 2024-04-13 22:45 UTC (permalink / raw)
To: Per Bothner; +Cc: kawa mailing list
[-- Attachment #1: Type: text/plain, Size: 4891 bytes --]
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=#t
;; id=r
;; (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 => not defined
(lambda ()
(eval x (interaction-environment))
#t))))))) ; eval suceeded => defined
;; #|kawa:86|# (define k 0)
;; #|kawa:87|# (let loop () (if (< k 4) (let () (display k) (newline) (<- k
(+ k 1)) (loop))))
;; if-defined : where=#t
;; id=k
;; 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=#t
;; id=k
;; 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=#t
;; id=s
;; 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=#t
;; id=s
;; 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=") (display where) (newline)
(display "id=") (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=#f
id=#<syntax:unknown file:19:72 k>
#<unspecified>
ice-9/boot-9.scm:1685:16: In procedure raise-exception:
In procedure +: Wrong type argument in position 1: #<unspecified>
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 => not defined
(lambda ()
(eval x (interaction-environment))
#t))))))) ; eval suceeded => defined
(define-syntax if-defined
(lambda (stx)
(syntax-case stx ()
((_ id iftrue iffalse)
(let ((where (defined-symbol? #'id))) ;;(quote id))))
(display "if-defined : where=") (display where) (newline)
(display "id=") (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=#f
id=expr2
(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 AM Per Bothner <per@bothner.com> wrote:
>
>
> 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/
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: how to know if a variable is defined
2024-04-13 22:45 ` Damien Mattei
@ 2024-04-13 22:58 ` Damien Mattei
2024-04-16 6:37 ` Damien Mattei
0 siblings, 1 reply; 6+ messages in thread
From: Damien Mattei @ 2024-04-13 22:58 UTC (permalink / raw)
To: Per Bothner; +Cc: kawa mailing list
[-- Attachment #1: Type: text/plain, Size: 6840 bytes --]
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 => not defined
#|.....9|# (lambda ()
#|....10|# (eval x (interaction-environment))
#|....11|# #t))))))) ; eval suceeded => 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=") (display where) (newline)
#|.....18|# (display "id=") (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=#f
id=expr2
/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 AM Damien Mattei <damien.mattei@gmail.com>
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=#t
> ;; id=r
> ;; (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 => not defined
> (lambda ()
> (eval x (interaction-environment))
> #t))))))) ; eval suceeded => defined
>
>
> ;; #|kawa:86|# (define k 0)
> ;; #|kawa:87|# (let loop () (if (< k 4) (let () (display k) (newline) (<-
> k (+ k 1)) (loop))))
> ;; if-defined : where=#t
> ;; id=k
> ;; 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=#t
> ;; id=k
> ;; 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=#t
> ;; id=s
> ;; 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=#t
> ;; id=s
> ;; 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=") (display where) (newline)
> (display "id=") (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=#f
> id=#<syntax:unknown file:19:72 k>
> #<unspecified>
> ice-9/boot-9.scm:1685:16: In procedure raise-exception:
> In procedure +: Wrong type argument in position 1: #<unspecified>
>
> 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 => not defined
> (lambda ()
> (eval x (interaction-environment))
> #t))))))) ; eval suceeded => defined
>
> (define-syntax if-defined
> (lambda (stx)
> (syntax-case stx ()
> ((_ id iftrue iffalse)
> (let ((where (defined-symbol? #'id))) ;;(quote id))))
> (display "if-defined : where=") (display where) (newline)
> (display "id=") (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=#f
> id=expr2
> (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 AM Per Bothner <per@bothner.com> wrote:
>
>>
>>
>> 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/
>>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: how to know if a variable is defined
2024-04-13 22:58 ` Damien Mattei
@ 2024-04-16 6:37 ` Damien Mattei
0 siblings, 0 replies; 6+ messages in thread
From: Damien Mattei @ 2024-04-16 6:37 UTC (permalink / raw)
To: Per Bothner; +Cc: kawa mailing list
[-- Attachment #1: Type: text/plain, Size: 7493 bytes --]
this could not works because the defined-symbol? used in the macro
if-defined return false because at the expansion of the macro the symbol is
not defined.
Instead at run-time, this works:
#|kawa:21|# (define (foo2) (define x 7) (defined-symbol? x))
#|kawa:22|# (foo2)
#t
On Sun, Apr 14, 2024 at 12:58 AM Damien Mattei <damien.mattei@gmail.com>
wrote:
> 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 => not defined
> #|.....9|# (lambda ()
> #|....10|# (eval x (interaction-environment))
> #|....11|# #t))))))) ; eval suceeded => 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=") (display where) (newline)
> #|.....18|# (display "id=") (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=#f
> id=expr2
> /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 AM Damien Mattei <damien.mattei@gmail.com>
> 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=#t
>> ;; id=r
>> ;; (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 => not defined
>> (lambda ()
>> (eval x (interaction-environment))
>> #t))))))) ; eval suceeded => defined
>>
>>
>> ;; #|kawa:86|# (define k 0)
>> ;; #|kawa:87|# (let loop () (if (< k 4) (let () (display k) (newline) (<-
>> k (+ k 1)) (loop))))
>> ;; if-defined : where=#t
>> ;; id=k
>> ;; 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=#t
>> ;; id=k
>> ;; 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=#t
>> ;; id=s
>> ;; 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=#t
>> ;; id=s
>> ;; 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=") (display where) (newline)
>> (display "id=") (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=#f
>> id=#<syntax:unknown file:19:72 k>
>> #<unspecified>
>> ice-9/boot-9.scm:1685:16: In procedure raise-exception:
>> In procedure +: Wrong type argument in position 1: #<unspecified>
>>
>> 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 => not defined
>> (lambda ()
>> (eval x (interaction-environment))
>> #t))))))) ; eval suceeded => defined
>>
>> (define-syntax if-defined
>> (lambda (stx)
>> (syntax-case stx ()
>> ((_ id iftrue iffalse)
>> (let ((where (defined-symbol? #'id))) ;;(quote id))))
>> (display "if-defined : where=") (display where) (newline)
>> (display "id=") (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=#f
>> id=expr2
>> (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 AM Per Bothner <per@bothner.com> wrote:
>>
>>>
>>>
>>> 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/
>>>
>>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-04-16 6:38 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-10 21:49 how to know if a variable is defined Damien Mattei
2024-04-11 1:00 ` Per Bothner
2024-04-11 9:51 ` Lassi Kortela
2024-04-13 22:45 ` Damien Mattei
2024-04-13 22:58 ` Damien Mattei
2024-04-16 6:37 ` Damien Mattei
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).