uim doc

何となくuim wikiをいじってみた。とりあえず "what's uim" だけ。文法間違いの訂正と意味がわからんかった/わかりにくかったところを主に主観で編集。意図してない解釈が紛れ込んでないか確認おながいします。>書いた人

let-syntax matcher

このところ programming してなかったけど、時間ができたのでこんなおもちゃを書いてた。まだ Gauche も何も見てないので純粋に自分の頭から捻り出した品でつ。accumulate とか抽象化しときつつ、めんどくさくなって map 使ってたり。っていうか list をそれ以上抽象化することに意義はあるのか。一応実装差し替えはできるか。でも手間の方が大きい気も。

(define (mapping form pattern level)
  (list (list level pattern form)))

(define (accumulate map1 map2)
  (append map1 map2))

(define empty-mapping '())

(define (matcher form pattern level mismatch)
  (cond
   ((eq? form '...) (error))
   ((symbol? pattern) (mapping form pattern level))
   ((and (pair? pattern)
         (pair? form))
    (if (equal? (cdr pattern) '(...))
        (map (lambda (kar)
               (matcher kar (car pattern) (+ level 1) mismatch))
             form)
        (accumulate
         (matcher (car form) (car pattern) level mismatch)
         (matcher (cdr form) (cdr pattern) level mismatch))))
   ((vector? pattern)
    (error "Not implemented"))
   ((eqv? form pattern)
    empty-mapping)
   (else (mismatch))))

(define-syntax match
  (syntax-rules ()
    ((match form pattern)
     (call/cc
      (lambda (esc)
        (matcher 'form 'pattern 0 (lambda () (esc #f)))))
     )
    ))

(write
 (match (1 2 3) (a b ...))
 )