#lang racket
 
(define-syntax (set!-values* stx)
 (syntax-case stx ()
  ((_ (var ...) values-expr)
   (with-syntax (((local-var ...) (generate-temporaries #'(var ...))))
  #'(let-values (((local-var ...) values-expr))
     (set!* var local-var) ...)))))
 
(define-syntax (set!* stx)
 (syntax-case stx ()
  ((_ var val) (free-identifier=? #'var #'_) #'foid)
  ((_ var val) #'(set! var val))))
 
(define foid (void))
 
(define-values (a b c) (values 1 2 3))
(set!-values* (_ _ c) (values 4 5 6))
(list a b c)

Jos


________________________________

        From: users [mailto:[email protected]] On Behalf Of
Roman Klochkov
        Sent: sábado, 28 de junio de 2014 8:43
        To: Racket Users List
        Subject: [racket] Please help with syntax
        
        
        I need to define syntax set!-values*, that will ignore _ in value
place.
        
        Such as
        (define a #f)
        (set!-values* (_ _ a) (values 1 2 3)) ; should set a to 3.
        
        But I have two problems:
        1. _ don't want to pattern match in syntax case. If I make it
literal, I can't match "anything else".
        2. How to omit extra values. It seems that in any case I have to
assign them to something...
        
        Can you help me? I hope, that my problem in fact not hard, but I
have not enough experience to solve it.
        
        -- 
        Roman Klochkov 



____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to