Sorry I missed your previous emails these days.



I've recently become aware of several solutions discussed, which have been very 
helpful.




I see significant progress reflected in Guile's change notes, and the 
guile-define work also contains valuable insights. What I'm hoping to achieve 
is the ability to run code like this:




scheme

(define x 1)

(do ((i 0 (+ i 1)))  

    ((= i 2))

    (begin 

        (define x 2) 

        (display x)

    )

)

(display x)

Expected Output: 221




Currently, Guile throws an error for this, whereas Elk Scheme executes it 
successfully. (Elk reference: https://sam.zoy.org/elk/)




Thank you again for your responses.





At 2025-07-09 22:36:24, "Linus Björnstam" <linus.inter...@fastmail.se> wrote:
>Just fyi: The latest guile  3.0.10 has definitions in almost all definition 
>contexts. If i recall correctly I didnt add it to one of the old looping 
>constructs.
>-- 
>  Linus Björnstam
>
>On Sat, 5 Jul 2025, at 20:15, 胡峻豪 wrote:
>> I'm a newcomer to Guile and am currently using Guile to bind some C++ 
>> functions for users. Users already have many Scheme scripts, but their 
>> scripts don't comply with standards—for example, using define in 
>> expression contexts, which causes Guile to throw errors. I tried 
>> writing a code snippet with Claude to improve this, as shown below
>>
>>
>> (use-modules (ice-9 regex))
>>
>>
>> (define-syntax original-define
>>   (identifier-syntax define))
>>
>>
>> ;; Redefine define to avoid recursive calls
>> (define-syntax define
>>   (lambda (stx)
>>     (syntax-case stx ()
>>       ((_ var val)
>>        #'(begin
>>            (module-define! (current-module) 'var val)
>>            var))
>>       ((_ (name . args) . body)
>>        #'(begin
>>            (module-define! (current-module) 'name (lambda args . body))
>>            name)))))
>>
>>
>> But this makes the definitions module-level. If I define the same 
>> variable at the top level and inside a lambda, they overwrite each 
>> other. Scheme is too difficult for me. Is there any way to achieve this 
>> functionality without modifying the scripts? I would appreciate your 
>> help.

Reply via email to